Submission #932048

# Submission time Handle Problem Language Result Execution time Memory
932048 2024-02-22T21:20:00 Z amirhoseinfar1385 Street Lamps (APIO19_street_lamps) C++17
0 / 100
35 ms 48848 KB
#include<bits/stdc++.h>
using namespace std;
const int maxn=500000+10;
int n,q,all[maxn],res[maxn],now,qu[maxn];
set<int>st;
int fn[maxn*2],kaf=(1<<19);

struct offt2fen{
	vector<pair<int,int>>ady[maxn*2];
	void upd(int l,int r,int w){
		////cout<<"updy: "<<l<<" "<<r<<" "<<w<<endl;
		l++;
		r++;
		while(l<maxn){
			int fr=r;
			while(fr<maxn){
				ady[l].push_back(make_pair(-fr,w));
				fr+=(fr&(-fr));
			}
			l+=((-l)&l);
		}
	}
	void pors(int l,int r,int w){
		////cout<<"porsi: "<<l<<" "<<r<<" "<<w<<endl;
		l++;
		r++;
		while(l>0){
			int fr=r;
			while(fr>0){
				ady[l].push_back(make_pair(fr,w));
				fr-=(fr&(-fr));
			}
			l-=((-l)&l);
		}
	}
	void cal(int i){
		for(auto x:ady[i]){
			if(x.first<0){
				x.first=-x.first;
				fn[x.first]+=x.second;
			}
			else{
				res[x.second]+=fn[x.first];
			}
		}
		for(auto x:ady[i]){
			if(x.first<0){
				x.first=-x.first;
			}
			fn[x.first]=0;
		}
	}
	void build(){
		for(int i=0;i<maxn;i++){
			cal(i);
		}
	}
}fen;

struct segment{
	long long seg[(1<<20)];
	void upd(int i,int w){
		////cout<<"hey: "<<i-kaf<<" "<<w<<endl;
		while(i>0){
			if(i>=kaf){
				seg[i]=w;
			}
			else{
				seg[i]=max(seg[(i<<1)],seg[(i<<1)^1]);
			}
			i>>=1;
		}
	}
	int pors(int i,int l,int r,int tl,int tr){
		if(l>r||l>tr||r<tl||tl>tr){
			return 0;
		}
		if(l>=tl&&r<=tr){
			return seg[i];
		}
		int m=(l+r)>>1;
		return max(pors((i<<1),l,m,tl,tr),pors((i<<1)^1,m+1,r,tl,tr));
	}
}seg;

void calu(int l,int r,int w){
	fen.upd(l,l,w);
	fen.upd(l,r+1,-w);
	fen.upd(r+1,l,-w);
	fen.upd(r+1,r+1,w);
}

void upd(int ind){
	st.erase(ind);
	auto y=st.lower_bound(ind);
	int nx=*y;
	y--;
	int ps=*y;
	if(all[ind]){
		//calu(ind+1,nx-1);
		//calu(ps+1,ind-1);
		//seg.upd(ind+kaf,now);
		calu(ps+1,ind-1,-(maxn-now));
		calu(ind+1,nx-1,-(maxn-now));
		calu(ps+1,nx-1,maxn-now);
	}
	else{
	//	int x=calu(ps+1,nx-1);
	//	calu(ps+1,ind-1,-1,x);
	//	calu(ind+1,nx-1,-1,x);
	//	seg.upd(ind+kaf,maxn+10);
	//	st.insert(ind);
		calu(ps+1,nx-1,-(maxn-now));
		calu(ps+1,ind-1,(maxn-now));
		calu(ind+1,nx-1,(maxn-now));
		st.insert(ind);
	}
	all[ind]^=1;
}

void pors(int l,int r){
	////cout<<"Wtf: "<<l<<" "<<r<<" "<<seg.pors(1,0,kaf-1,l,r)<<endl;
	//res[now]=max(0,now-seg.pors(1,0,kaf-1,l,r));
	auto x=*st.lower_bound(l);
	//cout<<"wtf: "<<l<<" "<<x<<" "<<r<<endl;
	if(x>r){
		res[now]-=maxn-now;
	}
	fen.pors(l,r,now);
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	////cout.tie(0);
	cin>>n>>q;
	st.insert(0);
	st.insert(n+1);
	calu(1,n,maxn);
	for(int i=1;i<=n;i++){
		char c;
		cin>>c;
		all[i]=c-'0';
		all[i]^=1;
		if(all[i]==1){
		//	st.insert(i);
		//	seg.upd(i+kaf,maxn+10);
			all[i]=0;
			upd(i);
		}
	}
	return 0;
	for(int i=1;i<=q;i++){
		now=i;
		string s;
		int l,r;
		cin>>s>>l;
		if(s[0]=='q'){
			cin>>r;
			r--;
			pors(l,r);
			qu[now]=1;
		}
		else{
			upd(l);
		}
	}
	fen.build();
	for(int i=1;i<=q;i++){
		if(qu[i]==1){
			cout<<res[i]<<"\n";
		}
	}
}
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 31324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 33116 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 48848 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 40060 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 31324 KB Output isn't correct
2 Halted 0 ms 0 KB -