Submission #421990

#TimeUsernameProblemLanguageResultExecution timeMemory
421990kai824Food Court (JOI21_foodcourt)C++17
14 / 100
1101 ms254692 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define eb emplace_back #define mp make_pair #define f first #define s second #define pii pair<int,int> struct node{ node *l,*r; int s,e,v=0; node(int ss,int ee){ s=ss;e=ee; if(s==e){ l=r=NULL; }else{ l=new node(s,(s+e)/2); r=new node((s+e)/2+1,e); } } void update(int a,int b,int c){ if(a<=s && e<=b){ v+=c; return; } if(a<=(s+e)/2)l->update(a,b,c); if((s+e)/2<b)r->update(a,b,c); } int query(int p,bool clear=false){ if(s==e){ if(clear){ int ans=v; v=0; return ans; } return v; } l->v+=v;r->v+=v;v=0; if(p<=(s+e)/2)return l->query(p,clear); else return r->query(p,clear); } } *root; deque<pair<int,pii> > dq[65005];//size, type, prefix sum... int os[65005];//offset int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(0); int n,m,q; cin>>n>>m>>q; root=new node(1,n); int a,b,c,d,e; while(q--){ cin>>a; if(a==1){//people join the queue... small number... cin>>b>>c>>d>>e; for(int i=b;i<=c;i++){ a=root->query(i,true); while(dq[i].size()>0 && a>0){ if(dq[i][0].f<=a){ os[i]+=dq[i][0].f; a-=dq[i][0].f; dq[i].pop_front(); }else{ dq[i][0].f-=a; os[i]+=a; a=0; } } if(dq[i].size()==0){ os[i]=0; dq[i].eb(e,mp(d,e)); }else{ dq[i].eb(e,mp(d,e+dq[i].back().s.s)); } } }else if(a==2){//people leave the queue... cin>>b>>c>>d; root->update(b,c,d); }else{ cin>>b>>c;//query shop b, cth customer... int i=b; a=root->query(i,true); while(dq[i].size()>0 && a>0){ if(dq[i][0].f<=a){ os[i]+=dq[i][0].f; a-=dq[i][0].f; dq[i].pop_front(); }else{ dq[i][0].f-=a; os[i]+=a; a=0; } } if(dq[i].size()==0 || dq[i].back().s.s-os[i]<c){ cout<<"0\n"; continue; } int lo=0,hi=dq[i].size()-1,mid; while(lo<hi){ mid=lo+((hi-lo)/2); if(dq[i][mid].s.s-os[i]<c)lo=mid+1; else hi=mid; } cout<<dq[i][lo].s.f<<'\n'; } } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...