제출 #524042

#제출 시각아이디문제언어결과실행 시간메모리
524042Koosha_mv가로등 (APIO19_street_lamps)C++14
20 / 100
5053 ms190636 KiB
#include <bits/stdc++.h>
using namespace std;
#define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl
#define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl
#define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl
#define eror(x) cout<<#x<<'='<<(x)<<endl
#define f_(i,a,b) for(int i=a;i>=b;i--)
#define f(i,a,b) for(int i=a;i<b;i++)
#define nb(x) __builtin_popcount(x)
#define all(v) v.begin(),v.end()
#define bit(n,k) (((n)>>(k))&1)
#define maxm(a,b) a=max(a,b)
#define minm(a,b) a=min(a,b)
#define lst(x) x[x.size()-1]
#define sz(x) int(x.size())
#define mp make_pair
#define ll long long
#define pb push_back
#define S second
#define F first
#define int ll

const int N=6e5+99;

int n,q,a[N],b[N],ans[N],type[N];
string t;
set<int> s;
vector<int> seg[N],fenwik[N];

void addvec(int x,int y){
	x+=n;
	while(x){
		seg[x].pb(y);
		fenwik[x].pb(0);
		x/=2;
	}
}
void build(){
	f(i,1,2*n){
		sort(seg[i].begin(),seg[i].end());
		seg[i].resize(unique(seg[i].begin(),seg[i].end())-seg[i].begin());
		while(fenwik[i].size()>seg[i].size()) fenwik[i].pop_back();
	}
}
void add(int id,int x,int val){
	//cout<<id<<" "<<x<<" "<<val<<endl;
	//dbgv(seg[id]);
	//cout<<id<<" "<<x<<" "<<val<<endl;
	f(i,1,seg[id].size()){
		if(seg[id][i]>=x){
			//cout<<id<<" --> "<<i<<endl;
			fenwik[id][i]+=val;
		}
	}
	return ;
	x=lower_bound(all(seg[id]),x)-seg[id].begin();
	for(;x<fenwik[id].size();x+=(x&-x)){
		fenwik[id][x]+=val;
	}
	//eror(fenwik[id].back());
}
void Add(int l,int r,int L,int R,int val){
	for(l+=n,r+=n;l<r;l>>=1,r>>=1){
		if(l&1){
			add(l,L,val);
			add(l,R,-val);
			l++;
		}
		if(r&1){
			r--;
			add(r,L,val);
			add(r,R,-val);
		}
	}
}
int get(int x,int y){
	/*f(i,1,seg[x].size()){
		if(seg[x][i]==y){
			return fenwik[x][i];
		}
	}
	assert(0);*/
	//sort(all(seg[x]));
	int res=0;
	y=lower_bound(all(seg[x]),y)-seg[x].begin();
	return fenwik[x][y];
	for(;y>0;y-=y&-y){
		res+=fenwik[x][y];
	}
	return res;
}
int Get(int x,int y){
	int res=0;
	x+=n;
	while(x){
		res+=get(x,y);
		x/=2;
	}
	return res;
}
main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	cin>>n>>q>>t;
	s.insert(-1);
	s.insert(n);
	f(i,0,n) if(t[i]=='0') s.insert(i);
	f(i,1,2*n) seg[i].pb(-1),fenwik[i].pb(0);
	f(i,1,q+1){
		string s;
		cin>>s;
		if(s[0]=='t'){
			type[i]=1;
			cin>>a[i]; a[i]--;
		}
		else{
			type[i]=2;
			cin>>a[i]>>b[i]; a[i]--,b[i]-=2;
			addvec(a[i],b[i]);
		}
	}
	build();
	f(i,1,q+1){
		if(type[i]==1){
			int l=(*prev(s.lower_bound(a[i])))+1,r=(*s.upper_bound(a[i]))-1;
			if(s.find(a[i])!=s.end()){
				s.erase(a[i]);
				Add(l,a[i]+1,a[i],r+1,-i);
				f(j,1,q+1){
					if(type[j]==2 && l<=a[j] && a[j]<=a[i] && a[i]<=b[j] && b[j]<=r){
						ans[j]-=i;
					}
				}
			}
			else{
				s.insert(a[i]);
				Add(l,a[i]+1,a[i],r+1,i);
				f(j,1,q+1){
					if(type[j]==2 && l<=a[j] && a[j]<=a[i] && a[i]<=b[j] && b[j]<=r){
						ans[j]+=i;
					}
				}
			}
		}
		else{
			int res=Get(a[i],b[i]);
			if((*s.lower_bound(a[i]))>b[i]){
				res+=i;
				ans[i]+=i;
			}
			cout<<res<<'\n';
		}
	}
}
/*
2 3
00
t 1
t 2
q 1 3

2 2
00
t 1
q 1 3

5 2
11011
toggle 3
query 1 6
*/

컴파일 시 표준 에러 (stderr) 메시지

street_lamps.cpp: In function 'void add(long long int, long long int, long long int)':
street_lamps.cpp:8:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    8 | #define f(i,a,b) for(int i=a;i<b;i++)
......
   49 |  f(i,1,seg[id].size()){
      |    ~~~~~~~~~~~~~~~~~~          
street_lamps.cpp:49:2: note: in expansion of macro 'f'
   49 |  f(i,1,seg[id].size()){
      |  ^
street_lamps.cpp:57:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for(;x<fenwik[id].size();x+=(x&-x)){
      |       ~^~~~~~~~~~~~~~~~~~
street_lamps.cpp: At global scope:
street_lamps.cpp:101:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  101 | main(){
      | ^~~~
#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...