#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+5;
int pref[MAXN],suff[MAXN],spref[MAXN][20],ssuff[MAXN][20];
int getlog(long long n) { return 63-__builtin_clzll(n); }
int rmqpref(int l,int r)
{
int lg=getlog(r-l+1);
return min(spref[l][lg],spref[r-(1<<lg)+1][lg]);
}
int rmqsuff(int l,int r)
{
int lg=getlog(r-l+1);
return min(ssuff[l][lg],ssuff[r-(1<<lg)+1][lg]);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,q;
string s;
cin>>n>>s>>q;
s=' '+s;
for(int i=1;i<=n;i++) spref[i][0]=(pref[i]=pref[i-1]+(s[i]=='C')-(s[i]=='T'));
for(int i=n;i;i--) ssuff[i][0]=(suff[i]=suff[i+1]+(s[i]=='C')-(s[i]=='T'));
for(int j=1;(1<<j)<=n;j++) for(int i=1;i<=n-(1<<j)+1;i++)
{
spref[i][j]=min(spref[i][j-1],spref[i+(1<<(j-1))][j-1]);
ssuff[i][j]=min(ssuff[i][j-1],ssuff[i+(1<<(j-1))][j-1]);
}
while(q--)
{
int l,r;
cin>>l>>r;
cout<<max(0,max(pref[l-1]-rmqpref(l,r),suff[r+1]-rmqsuff(l,r)))<<"\n";
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |