func_code_string: #include <bits/stdc++.h>   using namespace std;   int di[] = {0, 0, 1, -1, 1, 1, -1, -1};   int dj[] = {1, -1, 0, 0, -1, 1, 1, -1};   const double PI = 3.14159265359, EPS = 1e-9;   const int N = 1000006, M = 1000006, Mod = 1000000007;   vector<int> adj[N];   pair<int, int> tree[4 * N];   int n;   string str;   void build(int idx, int s, int e) {     if (s == e) {       if (str[s] ==  ( ) ++tree[idx].first;       if (str[s] ==  ) ) ++tree[idx].second;       return;     }     int m = (s + e) / 2;     build(idx << 1, s, m);     build(idx << 1 | 1, m + 1, e);     tree[idx].first = tree[idx << 1 | 1].first +                       max(0, tree[idx << 1].first - tree[idx << 1 | 1].second);     tree[idx].second = tree[idx << 1].second +                        max(0, tree[idx << 1 | 1].second - tree[idx << 1].first);   }   pair<int, int> maxx(int l, int r, int idx, int s, int e) {     if (l > e || r < s) return pair<int, int>(0, 0);     if (l <= s && r >= e) return tree[idx];     int m = (s + e) / 2;     pair<int, int> p1 = maxx(l, r, idx << 1, s, m);     pair<int, int> p2 = maxx(l, r, idx << 1 | 1, m + 1, e);     pair<int, int> ret;     ret.first = p2.first + max(0, p1.first - p2.second);     ret.second = p1.second + max(0, p2.second - p1.first);     return ret;   }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0), cout.precision(10),         cout << fixed;     cin >> str;     str =  s  + str;     n = (int)str.size();     build(1, 1, n);     int m;     cin >> m;     int l, r;     while (m--) {       cin >> l >> r;       pair<int, int> p = maxx(l, r, 1, 1, n);       cout << r - l + 1 - p.first - p.second <<   n ;     }     return 0;   }   