2022 ccpc 广东省赛 F 望舒客栈的委托
作者:互联网
当成大模拟写了,就是开了四个set辅助
今天才知道set的find函数是logN的,因为里面封装了红黑树(喵喵喵?
re了一发,又t了一发
理论上模拟的时间复杂度不会t,所以猜测是因为set没写好,没找到东西,卡了
re了应该是数组没开够
修修改改终于补了队友赛时过的题,码量还是不够,继续努力啊
#include<bits/stdc++.h> using namespace std; struct lys{ int x,a,d,op; }f[3*int(1e6)+7]; struct bjx{ int tim,id,op; }t[3*int(1e6)+7]; set<int>s[6]; int book[2*int(1e6)+7]; bool cmp(bjx a,bjx b){ return a.tim<b.tim; } int main(){ //freopen("lys.in","r",stdin); std::ios::sync_with_stdio(false); int n; int m=0,cnt=0; cin>>n; for(int i=1;i<=n;i++){ cin>>f[i].x>>f[i].a>>f[i].d>>f[i].op; t[++cnt].tim=f[i].a;t[cnt].id=i;t[cnt].op=0; t[++cnt].tim=f[i].d;t[cnt].id=i;t[cnt].op=1; } sort(t+1,t+cnt+1,cmp); for(int i=1;i<=cnt;i++){ if(t[i].op==0)// arive {int id=t[i].id; if(f[id].op==0){// she kong if(!s[0].empty()) { int h=*s[0].begin(); s[f[id].x].insert(h); book[id]=h; s[0].erase(h); } else { m++; book[id]=m; s[f[id].x].insert(m); } } else { int pos=0;int tmp[5]; for(int ii=0;ii<=3;ii++) { if(!s[ii].empty()) tmp[ii]=*s[ii].begin(); else tmp[ii]=0x3f3f3f3f; } for(int ii=0;ii<=3;ii++) if(ii+f[id].x<=4&&tmp[ii]<tmp[pos]) pos=ii; if(tmp[pos]==0x3f3f3f3f) { m++; s[f[id].x].insert(m); book[id]=m; } else { int h=tmp[pos]; book[id]=h; s[pos+f[id].x].insert(h); s[pos].erase(h); } } } else { int id=book[t[i].id]; for(int ii=1;ii<=4;ii++){ if(s[ii].find(id)!=s[ii].end()){ s[ii].erase(id); s[ii-f[t[i].id].x].insert(id); break; } } } } cout<<m; }
标签:望舒,cnt,set,int,ccpc,tim,2022,1e6,op 来源: https://www.cnblogs.com/liyishui2003/p/16558969.html