Submission #254814

#TimeUsernameProblemLanguageResultExecution timeMemory
254814MKopchevLast supper (IOI12_supper)C++14
0 / 100
186 ms45552 KiB
#include "advisor.h" #include<bits/stdc++.h> using namespace std; const int nmax=2e5+42; int pointer=0; unsigned char ad[nmax]; int seen[nmax]; int nxt_seen[nmax]; set< pair<int/*seen next*/,int/*id*/> > s; int when_pushed[nmax]; set<int> cut_moment[nmax]; vector<int> there[nmax]; int check_next_moment(int pos,int after) { if(there[pos].size()==0)return 0; int p=upper_bound(there[pos].begin(),there[pos].end(),after)-there[pos].begin(); if(p==there[pos].size())return 0; if(cut_moment[pos].count(there[pos][p]))return 0; return 1; } void ComputeAdvice(int *C,int N,int K,int M) { for(int i=0;i<N;i++) seen[i]=N; for(int i=N-1;i>=0;i--) { nxt_seen[i]=seen[C[i]]; seen[C[i]]=i; } for(int i=0;i<K;i++) s.insert({nxt_seen[i],i}); for(int i=0;i<K;i++) if(s.count({i,C[i]})) { s.erase({i,C[i]}); s.insert({nxt_seen[i],C[i]}); } else { //cut the furthest set< pair<int/*seen next*/,int/*id*/> >::iterator it=s.end(); it--; int which=(*it).second; cut_moment[which].insert(i); when_pushed[C[i]]=i; s.erase(it); s.insert({nxt_seen[i],C[i]}); } for(int i=0;i<N;i++) there[C[i]].push_back(i); for(int i=0;i<K;i++) WriteAdvice(check_next_moment(i,-1)); for(int i=0;i<N;i++) WriteAdvice(check_next_moment(C[i],i)); }
#include "assistant.h" #include<bits/stdc++.h> using namespace std; const int nmax=2e5+42; set<int> active,passive; void Assist(unsigned char *A, int N, int K, int R) { for(int i=0;i<K;i++) if(A[i]==1)active.insert(i); else passive.insert(i); for(int i=K;i<N+K;i++) { int cur=GetRequest(); if(active.count(cur)) { active.erase(cur); } else if(passive.count(cur)) { passive.erase(cur); } else if(passive.size()) { int tp=*passive.begin(); passive.erase(tp); PutBack(tp); } else { int tp=*active.begin(); active.erase(tp); PutBack(tp); } if(A[i]==1)active.insert(cur); else passive.insert(cur); } }

Compilation message (stderr)

advisor.cpp: In function 'int check_next_moment(int, int)':
advisor.cpp:29:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(p==there[pos].size())return 0;
        ~^~~~~~~~~~~~~~~~~~~
#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...