이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;
const int maxn = 200005;
int f1[maxn], f2[maxn], f3[maxn];
bool del[maxn];
void ComputeAdvice(int *C, int N, int K, int M) {
for (int i = 0; i < N; ++i) f1[i] = N;
for (int i = N - 1; i >= 0; --i) {
f2[i] = f1[C[i]], f1[C[i]] = i;
}
for (int i = 0; i < K; ++i) f2[i + N] = f1[i];
set< pair<int, int> > s;
for (int i = 0; i < N; ++i) f3[i] = -1;
for (int i = 0; i < K; ++i) {
f3[i] = i + N, s.insert({f2[i + N], i + N});
}
for (int i = 0; i < N; ++i) {
int &tmp = f3[C[i]];
set< pair<int, int> > :: iterator it;
if (tmp == -1) {
it = --s.end();
int p = it -> second;
del[p] = 1;
if (p > N) f3[p - N] = -1;
else f3[C[p]] = -1;
}
else {
it = s.find({f2[tmp], tmp});
assert(it != s.end());
}
s.erase(it);
tmp = i;
s.insert({f2[i], i});
}
for (auto i : s) del[i.second] = 1;
for (int i = 0; i < N + K; ++i) WriteAdvice(del[i]);
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;
void Assist(unsigned char *A, int N, int K, int R) {
set<int> s1, s2;
for (int i = 0; i < K; ++i) {
s1.insert(i);
if (A[i + N]) s2.insert(i);
}
for (int i = 0; i < N; ++i) {
int tmp = GetRequest();
if (s1.find(tmp) == s1.end()) {
int p = *s2.begin();
assert(s1.find(p) != s1.end());
s1.erase(p), s2.erase(p);
PutBack(p);
s1.insert(tmp);
}
if (A[i]) s2.insert(i);
}
}
# | 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... |