Submission #1308720

#TimeUsernameProblemLanguageResultExecution timeMemory
1308720Jawad_Akbar_JJ최후의 만찬 (IOI12_supper)C++20
100 / 100
108 ms8348 KiB
#include <iostream> #include <set> #include "advisor.h" #include "assistant.h" using namespace std; const int Nn = 1<<18; int a[Nn], ind1[Nn], ind2[Nn], prv[Nn], nxt[Nn], pres[Nn], used[Nn]; void ComputeAdvice(int *C, int n, int k, int m){ for (int i=1;i<=k;i++) a[i] = i-1; for (int i=k+1;i<=k+n;i++) a[i] = C[i - k - 1]; for (int i=1;i<=n+k;i++) prv[i] = ind1[a[i]], ind1[a[i]] = i; for (int i=n+k;i>=1;i--){ if (ind2[a[i]]) nxt[i] = ind2[a[i]]; else nxt[i] = 1e6; ind2[a[i]] = i; } set<pair<int, int>> st; for (int i=1;i<=k;i++) st.insert({nxt[i], i-1}), pres[i-1] = 1; for (int i=k+1;i<=n+k;i++){ if (pres[a[i]]){ st.erase({prv[i], a[i]}); st.insert({nxt[i], a[i]}); used[prv[i]] = 1; } else{ auto [mx, id] = *rbegin(st); st.erase({mx, id}); pres[id] = 0; st.insert({nxt[i], a[i]}), pres[a[i]] = 1; } } for (int i=1;i<=n+n;i++) WriteAdvice(used[i]); }
#include <iostream> #include <set> #include "advisor.h" #include "assistant.h" using namespace std; void Assist(unsigned char *A, int n, int k, int R){ set<int> O, Z; for (int i=0;i<k;i++){ if ((int)A[i] == 0) Z.insert(i); else O.insert(i); } for (int i=0;i<n;i++){ int nw = GetRequest(); if (O.find(nw) == O.end()){ PutBack(*Z.begin()); Z.erase(Z.begin()); O.insert(nw); } if ((int)A[i+k] == 0) O.erase(nw), Z.insert(nw); } }
#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...