이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;
void ComputeAdvice(int *c, int n, int k, int m) {
vector<int> ord;
vector<int> nxt(n+k);
vector<int> prv(n+k);
map<int,int> M;
for(int i = 0; i < k; ++i)ord.push_back(i);
for(int i = 0; i < n; ++i)ord.push_back(c[i]);
for(int i = 0; i < n+k; ++i){
if(M.find(ord[i]) == M.end())prv[i] = -1;
else prv[i] = M[ord[i]];
M[ord[i]] = i;
}
M.clear();
for(int i = n+k-1; ~i; --i){
if(!M[ord[i]])nxt[i] = n+k;
else nxt[i] = M[ord[i]];
M[ord[i]] = i;
}
vector<int> rem(n+k,0);
multiset<int> pq;
for(int i = 0; i < k; ++i){
pq.insert(nxt[i]);
}
for(int i = k; i < n+k; ++i){
if(pq.count(i)){
pq.insert(nxt[i]);
pq.erase(i);
rem[prv[i]] = 1;
continue;
}
pq.erase(prev(pq.end()));
pq.insert(nxt[i]);
}
for(auto x : rem){
WriteAdvice(x);
}
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;
void Assist(unsigned char *a, int n, int k, int r) {
set<int> on;
vector<int> ord;
for(int i = 0; i < k; ++i){
on.insert(i);
ord.push_back(i);
}
int cn = 0;
int cn2 = 0;
for(int i = 0; i < n; ++i){
int req = GetRequest();
ord.push_back(req);
if(on.count(req))continue;
while(a[cn2++] == 1)cn++;
on.insert(req);
on.erase(ord[cn]);
PutBack(ord[cn++]);
}
}
/*
* Query types:
* GetRequest()
* PutBack(int x)
*
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |