func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MX = 200100;   int N, M;   char S[MX];   int A[MX];   struct Segment {     int a, b, c, d, e;     int z, l, r;     void add(int x) { a += x, b += x, c -= x, d -= x, z += x; }   } T[MX << 2];   inline void PushUp(int i) {     Segment &t = T[i], &x = T[(i << 1)], &y = T[(i << 1 | 1)];     t.a = max(x.a, y.a);     t.b = min(x.b, y.b);     t.c = max(max(x.c, y.c), x.a - 2 * y.b);     t.d = max(max(x.d, y.d), y.a - 2 * x.b);     t.e = max(max(x.e, y.e), max(x.c + y.a, x.a + y.d));   }   inline void PushDown(int i) {     if (T[i].z) T[(i << 1)].add(T[i].z), T[(i << 1 | 1)].add(T[i].z), T[i].z = 0;   }   void Build(int i, int l, int r) {     T[i].l = l, T[i].r = r;     if (l == r) {       T[i].a = T[i].b = A[l], T[i].c = T[i].d = -A[l];       return;     }     int m = (l + r) >> 1;     Build((i << 1), l, m), Build((i << 1 | 1), m + 1, r);     PushUp(i);   }   void Add(int i, int a, int b, int x) {     if (a <= T[i].l && T[i].r <= b) {       T[i].add(x);       return;     }     PushDown(i);     if (a <= T[(i << 1)].r) Add((i << 1), a, b, x);     if (b >= T[(i << 1 | 1)].l) Add((i << 1 | 1), a, b, x);     PushUp(i);   }   int main() {     int n;     scanf( %d%d%s , &n, &M, S + 1), N = strlen(S + 1);     for (int i = (1); i <= (N); ++i) A[i] = A[i - 1] + (S[i] ==  (  ? 1 : -1);     Build(1, 0, N);     printf( %d n , T[1].e);     for (int i = (1); i <= (M); ++i) {       int l, r;       scanf( %d%d , &l, &r);       if (l > r) swap(l, r);       if (S[l] != S[r]) Add(1, l, r - 1, S[l] ==  (  ? -2 : 2), swap(S[l], S[r]);       printf( %d n , T[1].e);     }     return 0;   }   