func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 5;   int n, q;   char s[N];   struct node {     int s, x, z, xz, zy, d;   } tr[N << 2];   void upd(int o) {     int S = tr[(o << 1)].s, lx = tr[(o << 1)].x, lz = tr[(o << 1)].z,         lxz = tr[(o << 1)].xz, lzy = tr[(o << 1)].zy;     int rx = tr[(o << 1 | 1)].x + S, rz = tr[(o << 1 | 1)].z - 2 * S,         rxz = tr[(o << 1 | 1)].xz - S, rzy = tr[(o << 1 | 1)].zy - S;     tr[o].s = S + tr[(o << 1 | 1)].s;     tr[o].x = max(lx, rx), tr[o].z = max(lz, rz);     tr[o].xz = max(max(lxz, rxz), lx + rz);     tr[o].zy = max(max(lzy, rzy), lz + rx);     tr[o].d =         max(max(tr[(o << 1)].d, tr[(o << 1 | 1)].d), max(lxz + rx, lx + rzy));   }   void mdf(int o, int l, int r, int p, int c) {     if (l == r) {       tr[o] = {c, c, -2 * c, -c, -c, 0};       return;     }     int mid = (l + r) >> 1;     if (p <= mid)       mdf((o << 1), l, mid, p, c);     else       mdf((o << 1 | 1), mid + 1, r, p, c);     upd(o);   }   int main() {     scanf( %d%d%s , &n, &q, s + 1);     for (int i = (1); i <= (2 * n - 2); ++i)       mdf(1, 1, 2 * n - 2, i, s[i] ==  (  ? 1 : -1);     printf( %d n , tr[1].d);     while (q--) {       int x, y;       scanf( %d%d , &x, &y);       swap(s[x], s[y]);       mdf(1, 1, 2 * n - 2, x, s[x] ==  (  ? 1 : -1);       mdf(1, 1, 2 * n - 2, y, s[y] ==  (  ? 1 : -1);       printf( %d n , tr[1].d);     }     return 0;   }   