Submission #829958

#TimeUsernameProblemLanguageResultExecution timeMemory
829958MODDILast supper (IOI12_supper)C++14
100 / 100
235 ms79428 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; #define pb push_back #define mp make_pair typedef long long ll; typedef vector<int> vi; typedef vector<ll> vl; typedef pair<int,int> pii; typedef pair<ll, ll> pll; int n; stack<int> G[100105]; set<pii> activasion; set<int> in_pq; int advice[2 * 100100], out[100100]; void ComputeAdvice(int *C, int N, int K, int M) { n=N; for(int i=n-1;i>=0;i--) G[C[i]].push(i); for(int i=0;i<K;i++){ int when = n+1; if(!G[i].empty()) when=G[i].top(); activasion.insert(mp(-when, i)); in_pq.insert(i); } for(int i=0;i<K;i++) out[i] = i; for(int i=0;i<n+K;i++) advice[i] = 1; for(int i=0;i<n;i++){ G[C[i]].pop(); out[C[i]]=K+i; if(in_pq.find(C[i])==in_pq.end()){ pii sega=*activasion.begin(); activasion.erase(*activasion.begin()); in_pq.erase(sega.second); advice[out[sega.second]]=0; } int when = 0; in_pq.insert(C[i]); if(G[C[i]].empty()) when=n+1; else when=G[C[i]].top(); activasion.insert(mp(-when, C[i])); } for(int i=0;i<n+K;i++) WriteAdvice(advice[i]); }
#include "assistant.h" #include<bits/stdc++.h> using namespace std; void Assist(unsigned char *A, int N, int K, int R) { int n = N; set<int> odma, in; for(int i=0;i<K;i++){ if(A[i] == 0) odma.insert(i); in.insert(i); } for(int i=0;i<n;i++){ int adv=GetRequest(); if(in.find(adv)==in.end()){ PutBack(*odma.begin()); in.erase(*odma.begin()); odma.erase(odma.begin()); } in.emplace(adv); if(A[i+K]==0) odma.emplace(adv); } }
#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...