Submission #805394

#TimeUsernameProblemLanguageResultExecution timeMemory
805394aymanrsLast supper (IOI12_supper)C++14
0 / 100
95 ms9544 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include "advisor.h" using namespace std; using namespace __gnu_pbds; using Set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>; void ComputeAdvice(int *C, int N, int K, int M) { set<pair<int, int>> q; int s[N], nx[N]; bool f[N] = {false}; fill(s, s+N, N); int c[N]; for(int i = N-1;i >= 0;i--) { nx[i] = s[C[i]]; s[C[i]] = i; } int sz = 0; Set pbd; vector<int> bad; for(int i = 0;i < K;i++){ WriteAdvice(s[i] != N); if(s[i] != N) { sz++; pbd.insert(i); q.insert({s[i], i}); } else { bad.push_back(i); } f[i] = true; c[i] = i; } for(int i = 0;i < N;i++){ if(f[C[i]]) { int ind = q.begin()->second; q.erase(q.begin()); WriteAdvice(nx[i] != N); if(nx[i] == N) { sz--; bad.push_back(ind); } else { pbd.erase(pbd.find(ind)); q.insert({nx[i], ind}); } continue; } if(!bad.empty()){ int ind = bad.back(); bad.pop_back(); WriteAdvice(nx[i] != N); if(nx[i] != N) { sz++; pbd.insert(ind); q.insert({nx[i], ind}); } else bad.push_back(ind); continue; } int ind = q.rbegin()->second; int L = log2(sz-1) + 1; int pind = pbd.order_of_key(ind); for(int b = 0;b < L;b++) WriteAdvice(1&(pind>>b)); WriteAdvice(nx[i] != N); q.erase(prev(q.end())); if(nx[i] == N) { sz--; pbd.erase(pbd.find(ind)); bad.emplace_back(ind); } else q.insert({nx[i], ind}); f[c[ind]] = false; f[C[i]] = true; c[ind] = C[i]; } }
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include "assistant.h" using namespace std; using namespace __gnu_pbds; using Set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>; void Assist(unsigned char *A, int N, int K, int R) { int c[N], indo[N]; bool f[N] = {false}; int cur = 0, sz = 0; Set pbd; vector<pair<int, int>> bad; for(int i = 0;i < K;i++){ f[i] = true; c[i] = i; indo[i] = i; if(A[cur++]){ sz++; pbd.insert(i); } else bad.emplace_back(i, i); } for(int i = 0;i < N;i++){ int r = GetRequest(); if(f[r]) { if(!A[cur++]){ sz--; pbd.erase(pbd.find(indo[r])); bad.emplace_back(r, indo[r]); } continue; } if(!bad.empty()){ PutBack(bad.back().first); int ind = bad.back().second; f[r] = true; f[bad.back().first] = false; indo[r] = ind; c[ind] = r; bad.pop_back(); if(A[cur++]) { sz++; pbd.insert(ind); } else bad.emplace_back(r, ind); continue; } int pind = 0, L = log2(sz-1); for(int b = 0;b < L;b++) { if(A[cur]) pind |= 1 << b; cur++; } int ind = *pbd.find_by_order(pind); PutBack(c[ind]); f[r] = true; f[c[ind]] = false; c[ind] = r; indo[r] = ind; if(!A[cur++]){ sz--; pbd.erase(pbd.find(ind)); bad.emplace_back(r, ind); } } }
#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...