#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=500010, S=(1<<19);
int n, q, a[N];
string s;
template<bool op>
class seg {
public:
void init() {init(1, 0, S-1);}
pair<int, int> query(int l, int r) {return query(1, 0, S-1, l, r);}
private:
pair<int, int> tree[2*S];
void init(int node, int s, int e) {
if(s==e) {
if(s<=n) tree[node]={a[s], -s};
return;
}
int lch=2*node, rch=lch+1, m=(s+e)/2;
init(lch, s, m), init(rch, m+1, e);
if(op) tree[node]=min(tree[lch], tree[rch]);
else tree[node]=max(tree[lch], tree[rch]);
}
pair<int, int> query(int node, int s, int e, int l, int r) {
if(l<=s && e<=r) return tree[node];
int lch=2*node, rch=lch+1, m=(s+e)/2;
if(r<=m) return query(lch, s, m, l, r);
if(l>m) return query(rch, m+1, e, l, r);
if(op) return min(query(lch, s, m, l, r), query(rch, m+1, e, l, r));
else return max(query(lch, s, m, l, r), query(rch, m+1, e, l, r));
}
};
seg<0> Tmx; seg<1> Tmn;
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>s;
for(int i=1; i<=n; i++) a[i]=a[i-1]+((s[i-1]=='C')?1:-1);
Tmx.init(), Tmn.init();
cin>>q;
while(q--) {
int l, r; cin>>l>>r;
pair<int, int> mx=Tmx.query(l-1, r), mn=Tmn.query(l-1, r);
if(-mx.second<-mn.second) cout<<max(mx.first-a[r], a[l-1]-mn.first)<<"\n";
else cout<<mx.first-a[r]+a[l-1]-mn.first<<"\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |