Submission #223614

#TimeUsernameProblemLanguageResultExecution timeMemory
223614Andrei_CotorElection (BOI18_election)C++11
100 / 100
657 ms44408 KiB
#include<fstream> #include<vector> #include<deque> #include<algorithm> #include<iostream> using namespace std; //ifstream fi("election.in"); //ofstream fo("election.out"); char S[500005]; vector<pair<int,int> > Q[500005]; deque<int> Canceled; int Rez[500005]; int MinSuf[2000005],Sum[2000005]; void update(int nod, int st, int dr, int poz, int val) { if(st==dr) { MinSuf[nod]=min(0,val); Sum[nod]=val; return; } int mij=(st+dr)/2; if(poz<=mij) update(2*nod,st,mij,poz,val); else update(2*nod+1,mij+1,dr,poz,val); Sum[nod]=Sum[2*nod]+Sum[2*nod+1]; MinSuf[nod]=min(MinSuf[2*nod+1],Sum[2*nod+1]+MinSuf[2*nod]); } int sumsuf; int getDecalaj(int nod, int st, int dr, int l, int r) { if(l<=st && dr<=r) { int _sumsuf=sumsuf; sumsuf+=Sum[nod]; return _sumsuf+MinSuf[nod]; } int mij=(st+dr)/2; int rez=0; if(r>mij) rez=min(rez,getDecalaj(2*nod+1,mij+1,dr,l,r)); if(l<=mij) rez=min(rez,getDecalaj(2*nod,st,mij,l,r)); return rez; } int src(int poz) { int rez=-1; for(int i=18; i>=0; i--) { if(rez+(1<<i)<Canceled.size() && Canceled[rez+(1<<i)]>poz) rez+=(1<<i); } return Canceled.size()-rez-1; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; cin>>(S+1); int q; cin>>q; for(int i=1; i<=q; i++) { int x,y; cin>>x>>y; Q[x].push_back({y,i}); } for(int i=n; i>=1; i--) { if(S[i]=='C') { update(1,1,n,i,1); if(!Canceled.empty()) { int last=Canceled.back(); Canceled.pop_back(); update(1,1,n,last,-1); } } else { Canceled.push_back(i); } for(auto qry:Q[i]) { int dr=qry.first; int ind=qry.second; sumsuf=0; int stdr=src(dr); int drst=-getDecalaj(1,1,n,i,dr); Rez[ind]=stdr+drst; } } for(int i=1; i<=q; i++) cout<<Rez[i]<<"\n"; //fi.close(); //fo.close(); return 0; }

Compilation message (stderr)

election.cpp: In function 'int src(int)':
election.cpp:65:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(rez+(1<<i)<Canceled.size() && Canceled[rez+(1<<i)]>poz)
            ~~~~~~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...