Submission #335122

#TimeUsernameProblemLanguageResultExecution timeMemory
335122nicholaskStreet Lamps (APIO19_street_lamps)C++14
20 / 100
1194 ms14096 KiB
#include <bits/stdc++.h>
using namespace std;
int a[300010];
int seg[1200010];
void build(int v,int tl,int tr){
	if (tl==tr){
		seg[v]=a[tl];
		return;
	}
	int tm=(tl+tr)>>1;
	build(v+v,tl,tm);
	build(v+v+1,tm+1,tr);
	seg[v]=max(seg[v+v],seg[v+v+1]);
}
void update(int v,int tl,int tr,int pos,int val){
	if (tl==tr){
		seg[v]=val;
		return;
	}
	int tm=(tl+tr)>>1;
	if (pos<=tm) update(v+v,tl,tm,pos,val);
	else update(v+v+1,tm+1,tr,pos,val);
	seg[v]=max(seg[v+v],seg[v+v+1]);
}
int query(int v,int tl,int tr,int l,int r){
	if (l>r) return 0;
	if (tl==l&&tr==r) return seg[v];
	int tm=(tl+tr)>>1;
	if (r<=tm) return query(v+v,tl,tm,l,r);
	if (l>tm) return query(v+v+1,tm+1,tr,l,r);
	return max(query(v+v,tl,tm,l,tm),query(v+v+1,tm+1,tr,tm+1,r));
}
int main(){
	int n,q;
	cin>>n>>q;
	string s;
	cin>>s;
	for (int i=1; i<=n; i++){
		if (s[i-1]=='1') a[i]=0;
		else a[i]=1e9;
	}
	build(1,1,n);
	for (int z=1; z<=q; z++){
		string temp;
		cin>>temp;
		if (temp=="toggle"){
			int u;
			cin>>u;
			update(1,1,n,u,z);
		} else {
			int u,v;
			cin>>u>>v;
			int ans=query(1,1,n,u,v-1);
			if (ans==1e9) cout<<0;
			else cout<<z-ans;
			cout<<endl;
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...