func_code_string: #include <bits/stdc++.h>   using namespace std;   class segtree {    public:     int val[(1 << 20) * 2];     int le[(1 << 20) * 2];     int ri[(1 << 20) * 2];     void update(int pos, int x) {       val[pos + (1 << 20) - 1] = 0;       le[pos + (1 << 20) - 1] = 1 - x;       ri[pos + (1 << 20) - 1] = x;     }     void up() {       for (int i = (1 << 20) - 2; i >= 0; i--) {         int add = min(le[i * 2 + 1], ri[i * 2 + 2]);         val[i] = val[i * 2 + 1] + val[i * 2 + 2] + add;         le[i] = le[i * 2 + 1] + le[i * 2 + 2] - add;         ri[i] = ri[i * 2 + 1] + ri[i * 2 + 2] - add;       }     }     pair<int, pair<int, int> > query(int a, int b, int k, int l, int r) {       pair<int, pair<int, int> > p = make_pair(0, make_pair(0, 0));       if (r < a || b < l) return p;       if (a <= l && r <= b) {         return make_pair(val[k], make_pair(le[k], ri[k]));       }       pair<int, pair<int, int> > x = query(a, b, k * 2 + 1, l, (l + r) / 2);       pair<int, pair<int, int> > y = query(a, b, k * 2 + 2, (l + r) / 2 + 1, r);       int z = min(x.second.first, y.second.second);       return make_pair(x.first + y.first + z,                        make_pair(x.second.first + y.second.first - z,                                  x.second.second + y.second.second - z));     }   } seg;   char ss[1000005];   int main() {     scanf( %s , &ss);     int n = strlen(ss);     for (int i = 0; i < n; i++) {       seg.update(i, (ss[i] ==  ) ));     }     seg.up();     int q;     scanf( %d , &q);     for (int i = 0; i < q; i++) {       int a, b;       scanf( %d %d , &a, &b);       a--;       b--;       printf( %d n , seg.query(a, b, 0, 0, (1 << 20) - 1).first * 2);     }   }   