Submission #1314400

#TimeUsernameProblemLanguageResultExecution timeMemory
1314400boclobanchatElection (BOI18_election)C++20
0 / 100
1 ms568 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...