Submission #69833

#TimeUsernameProblemLanguageResultExecution timeMemory
69833FedericoSJousting tournament (IOI12_tournament)C++14
49 / 100
1056 ms3448 KiB
#include <iostream> #include <vector> #include <assert.h> using namespace std; typedef pair<int,int> pii; int RT[4000005]; vector<int> V; int a,b; pii ans,res; int converti(int k){ int res=0; for(int i=0;i<k+1;) if(RT[res++]) i++; return res-1; } void elimina(int x, int y){ for(int i=x;i<=y;i++) RT[i]=0; } int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) { for(int i=0;i<400005;i++) RT[i]=1; for(int i=0;i<C;i++){ S[i]=converti(S[i]); E[i]=converti(E[i]+1); elimina(S[i]+1,E[i]-1); } for(int i=0;i<C;i++) for(int j=S[i];j<E[i]-1;j++) if(K[j]>R){ S[i]=E[i]=0; break; } for(int pos=0;pos<N;pos++){ V.clear(); for(int i=0;i<N;i++){ if(pos==i) V.push_back(R); if(i!=N-1) V.push_back(K[i]); } res={0,-pos}; for(a=pos;a>=0 and V[a]<=R;a--); a++; for(b=pos;b<N and V[b]<=R;b++); b--; assert(a==0 or V[a-1]>R); assert(b==N-1 or V[b+1]>R); for(int i=0;i<C;i++){ if(S[i]<=pos and pos<=E[i]-1) res.first++; } ans=max(ans,res); } return -ans.second; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...