Submission #707369

# Submission time Handle Problem Language Result Execution time Memory
707369 2023-03-08T23:02:24 Z KLPP Election (BOI18_election) C++14
100 / 100
688 ms 136804 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;
typedef long long int lld;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)

class ST{
	vector<array<lld,4>>arr;
	public:
	void init(int n){
		arr.resize(8*n,{0,0,0});
	}
	array<lld,4> combine(array<lld,4> A, array<lld,4> B){
		array<lld,4> C={A[0]+B[0],max(A[1],A[0]+B[1]),max(B[2],B[0]+A[2]),max(A[3],max(B[3],A[2]+B[1]))};
		return C;
	}
	void update(int a, int b, int node, int pos, lld val){
		if(pos<a || b<pos)return;
		if(a==b){
			arr[node]={val,max(0LL,val),max(0LL,val),max(0LL,val)};
			return;
		}
		int mid=(a+b)/2;
		update(a,mid,2*node,pos,val);
		update(mid+1,b,2*node+1,pos,val);
		arr[node]=combine(arr[2*node],arr[2*node+1]);
	}
	array<lld,4> query(int a, int b, int node, int l, int r){
		if(r<a || b<l){
			return {0,0,0,0};
		}
		if(l<=a && b<=r){
			return arr[node];
		}
		int mid=(a+b)/2;
		return combine(query(a,mid,2*node,l,r),query(mid+1,b,2*node+1,l,r));
	}
};

void solve(){
	/*freopen("cardgame.in", "r", stdin);
	freopen("cardgame.out", "w", stdout);*/
	int n,q;
	cin>>n;
	string s;
	cin>>s;
	cin>>q;
	ST S;
	S.init(n);
	rep(i,0,n){
		if(s[i]=='C')S.update(0,n-1,1,i,1);
		else S.update(0,n-1,1,i,-1);
	}
	while(q--){
		int l,r;
		cin>>l>>r;
		l--;r--;
		array<lld,4> A=S.query(0,n-1,1,l,r);
		cout<<A[3]-A[0]<<"\n";
	}
}
	

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.precision(16);
	int tt=1;
	//cin>>tt;
	rep(test,0,tt){
		solve();
	}
}

# Verdict Execution time Memory Grader output
1 Correct 2 ms 724 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 2 ms 724 KB Output is correct
5 Correct 2 ms 724 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 724 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 2 ms 724 KB Output is correct
5 Correct 2 ms 724 KB Output is correct
6 Correct 71 ms 18272 KB Output is correct
7 Correct 61 ms 18360 KB Output is correct
8 Correct 57 ms 19140 KB Output is correct
9 Correct 57 ms 19156 KB Output is correct
10 Correct 76 ms 19044 KB Output is correct
11 Correct 66 ms 19316 KB Output is correct
12 Correct 72 ms 19296 KB Output is correct
13 Correct 69 ms 19344 KB Output is correct
14 Correct 61 ms 19276 KB Output is correct
15 Correct 66 ms 19176 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 724 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 2 ms 724 KB Output is correct
5 Correct 2 ms 724 KB Output is correct
6 Correct 71 ms 18272 KB Output is correct
7 Correct 61 ms 18360 KB Output is correct
8 Correct 57 ms 19140 KB Output is correct
9 Correct 57 ms 19156 KB Output is correct
10 Correct 76 ms 19044 KB Output is correct
11 Correct 66 ms 19316 KB Output is correct
12 Correct 72 ms 19296 KB Output is correct
13 Correct 69 ms 19344 KB Output is correct
14 Correct 61 ms 19276 KB Output is correct
15 Correct 66 ms 19176 KB Output is correct
16 Correct 601 ms 135732 KB Output is correct
17 Correct 583 ms 135408 KB Output is correct
18 Correct 575 ms 135640 KB Output is correct
19 Correct 507 ms 135056 KB Output is correct
20 Correct 610 ms 135000 KB Output is correct
21 Correct 610 ms 136680 KB Output is correct
22 Correct 573 ms 136556 KB Output is correct
23 Correct 584 ms 136804 KB Output is correct
24 Correct 688 ms 136548 KB Output is correct
25 Correct 612 ms 136020 KB Output is correct