답안 #759379

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
759379 2023-06-16T08:54:10 Z Bula Election (BOI18_election) C++17
0 / 100
11 ms 19924 KB
#include<bits/stdc++.h>
using namespace std;

#define ll long long
const ll mod=1e9+7,N=5e5+1;
vector<int> pref(N),suf(N+1),t(4*N),t1(4*N);



int getans(int v,int tl,int tr,int l,int r){
	if(l>r) return -INT_MAX;
	if(l==tl && r==tr){
		return t[v];
	}
	int tm=(tl+tr)/2;
	return max(getans(v*2,tl,tm,l,min(r,tm)),getans(v*2+1,tm+1,tr,max(l,tm+1),r));
}

void build(int v,int tl,int tr){
	if(tl==tr){
		t[v]=pref[tl];
	}else{
		int tm=(tl+tr)/2;
		build(v*2,tl,tm);
		build(v*2+1,tm+1,tr);
		t[v]=max(t[v*2],t[v*2+1]);
	}
}

int getans1(int v,int tl,int tr,int l,int r){
	if(l>r) return -INT_MAX;
	if(l==tl && r==tr){
		return t1[v];
	}
	int tm=(tl+tr)/2;
	return max(getans1(v*2,tl,tm,l,min(r,tm)),getans1(v*2+1,tm+1,tr,max(l,tm+1),r));
}

void build1(int v,int tl,int tr){
	if(tl==tr){
		t1[v]=suf[tl];
	}else{
		int tm=(tl+tr)/2;
		build1(v*2,tl,tm);
		build1(v*2+1,tm+1,tr);
		t1[v]=max(t1[v*2],t1[v*2+1]);
	}
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
	int n;
	cin>>n;
	string s;
	cin>>s;
	vector<int> v(n+1);
	for(int i=1;i<=n;i++){
		if(s[i-1]=='T') v[i]=1;
		else v[i]=-1;
	}
	
	for(int i=1;i<=n;i++){
		pref[i]=pref[i-1]+v[i];
	}	
	for(int i=n;i>=1;i--){
		suf[i]=suf[i+1]+v[i];
	}
	build(1,1,n);
	build1(1,1,n);
	//for(int i=1;i<=n;i++) cout<<pref[i]<<" ";
	//cout<<endl;
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int l,r;
		cin>>l>>r;
		int p=0;
		int ans=getans(1,1,n,l,r);
		int ans1=getans1(1,1,n,l,r);
		if(ans>0) ans-=pref[l-1];
		if(ans1>0) ans1-=suf[r+1];
		p=max(p,max(ans,ans1));
		cout<<p<<endl;
	}
}


# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 19924 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 19924 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 19924 KB Output isn't correct
2 Halted 0 ms 0 KB -