orazma

k.cpp

Apr 9th, 2026
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define s second
  3. #define f first
  4. #define lb lower_bound
  5. #define pb push_back
  6. #define endl "\n"
  7. #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  8. using namespace std;
  9. const int mod1 = 1e9 + 7;
  10. const int mod2 = 676767677;
  11. const int MAXN = 1e6 + 5;
  12. const int INF = 1e9 + 7;
  13.  
  14. string s;
  15.  
  16. pair <int, pair <int, int> > t[4 * MAXN];
  17.  
  18. pair <int, pair <int, int> > combine(pair <int, pair <int, int> > left, pair <int, pair <int, int> > right){
  19.     pair <int, pair <int, int> > tmp;
  20.  
  21.     tmp.f = left.f + right.f;
  22.     int k = min(left.s.f, right.s.s);
  23.     tmp.f += k;
  24.     tmp.s.f = left.s.f + right.s.f - k;
  25.     tmp.s.s = left.s.s + right.s.s - k;
  26.     return tmp;
  27. }
  28.  
  29. void build(int v, int tl, int tr){
  30.     if (tl > tr){
  31.         return;
  32.     }
  33.     if (tl == tr){
  34.         t[v] = {0, {0, 0}};
  35.         if (s[tl] == '('){
  36.             t[v].s.f = 1;
  37.         }
  38.         else{
  39.             t[v].s.s = 1;
  40.         }
  41.         return;
  42.     }
  43.     int tm = (tl + tr) >> 1;
  44.     build(v << 1, tl, tm);
  45.     build((v << 1) | 1, tm + 1, tr);
  46.     t[v] = combine(t[v << 1], t[(v << 1) | 1]);
  47. }
  48.  
  49. pair <int, pair <int, int> > get(int v, int tl, int tr, int l, int r){
  50.  
  51.     if (l > r){
  52.         return {0, {0, 0}};
  53.     }
  54.     if (tl == l && tr == r){
  55.         return t[v];
  56.     }
  57.     int tm = (tl + tr) >> 1;
  58.  
  59.     return combine(get(v << 1, tl, tm, l, min(r, tm)),
  60.                    get((v << 1) | 1, tm + 1, tr, max(l, tm + 1), r));
  61. }
  62.  
  63.  
  64. void solve_problem() {
  65.  
  66.     cin >> s;
  67.     int n = s.size();
  68.     s = "#" + s;
  69.  
  70.     build(1, 1, n);
  71.     int q;
  72.     cin >> q;
  73.  
  74.     for (int i = 1; i <= q; i++){
  75.  
  76.         int l, r;
  77.         cin >> l >> r;
  78.  
  79.         cout << get(1, 1, n, l, r).first * 2 << "\n";
  80.     }
  81.  
  82.     return;
  83. }
  84.  
  85. signed main () {
  86.     IOS
  87.  
  88.     //freopen("sum.in", "r", stdin);
  89.     //freopen("sum.out", "w", stdout);
  90.  
  91.     int tt = 1;
  92.     //cin >> tt;
  93.  
  94.     while (tt--) {
  95.       solve_problem();
  96.     }
  97. }
  98.  
Advertisement
Add Comment
Please, Sign In to add comment