func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 10;   char s[maxn];   struct Node {     int sum, pmx, lmx, mi, ma, d;     Node() {}     Node(int a, int b, int c, int d, int e, int f) {       sum = a;       pmx = b;       lmx = c;       mi = d;       ma = e;       d = f;     }   };   Node segT[maxn << 2];   void maintain(int curPos) {     segT[curPos].sum = segT[curPos << 1].sum + segT[curPos << 1 | 1].sum;     segT[curPos].pmx =         max(segT[curPos << 1].pmx,             max(segT[curPos << 1 | 1].ma - 2 * segT[curPos << 1].mi +                     segT[curPos << 1].sum,                 segT[curPos << 1 | 1].pmx - segT[curPos << 1].sum));     segT[curPos].lmx =         max(segT[curPos << 1].lmx,             max(segT[curPos << 1 | 1].lmx - segT[curPos << 1].sum,                 segT[curPos << 1].ma - 2 * segT[curPos << 1 | 1].mi -                     2 * segT[curPos << 1].sum));     segT[curPos].mi = min(segT[curPos << 1].mi,                           segT[curPos << 1 | 1].mi + segT[curPos << 1].sum);     segT[curPos].ma = max(segT[curPos << 1].ma,                           segT[curPos << 1 | 1].ma + segT[curPos << 1].sum);     segT[curPos].d = max(max(segT[curPos << 1].d, segT[curPos << 1 | 1].d),                          max(segT[curPos << 1].ma + segT[curPos << 1 | 1].pmx -                                  segT[curPos << 1].sum,                              segT[curPos << 1].lmx + segT[curPos << 1].sum +                                  segT[curPos << 1 | 1].ma));   }   void build(int curPos, int curL, int curR) {     if (curL == curR) {       curR = s[curL] ==  (  ? 1 : -1;       segT[curPos] = Node(curR, -curR, -curR, curR, curR, 0);       return;     }     int mid = curL + curR >> 1;     build(curPos << 1, curL, mid);     build(curPos << 1 | 1, mid + 1, curR);     maintain(curPos);   }   void update(int pos, int curPos, int curL, int curR) {     if (curL == curR) return build(curPos, curL, curR);     int mid = curL + curR >> 1;     if (pos <= mid)       update(pos, curPos << 1, curL, mid);     else       update(pos, curPos << 1 | 1, mid + 1, curR);     maintain(curPos);   }   int main() {     int n, m;     scanf( %d%d , &n, &m);     scanf( %s , s + 1);     n = n * 2 - 2;     build(1, 1, n);     printf( %d n , segT[1].d);     while (m--) {       int x, y;       scanf( %d%d , &x, &y);       swap(s[x], s[y]);       update(x, 1, 1, n);       update(y, 1, 1, n);       printf( %d n , segT[1].d);     }     return 0;   }   