#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;
void ComputeAdvice(int *C, int n, int k, int m) {
vector<int> pos[n];
for (int i = k; i < n + k; i++) {
pos[C[i - k]].push_back(i);
}
for (int i = 0; i < n; i++)
pos[i].push_back(n + k);
int last[n]{};
fill(last, last + n, -1);
int remove[n + k]{};
set<pair<int,int>> s;
for (int i = 0; i < k; i++) {
s.emplace(pos[i][0], i);
last[i] = i;
}
for (int i = k; i < n + k; i++) {
int val = C[i - k];
int nxt = *upper_bound(pos[val].begin(), pos[val].end(), i);
if (last[val] != -1) {
s.erase({i, last[val]});
} else {
auto [x, y] = *s.rbegin();
s.erase(prev(s.end()));
remove[y] = true;
}
s.emplace(nxt, i);
last[val] = i;
}
for (int i = 0; i < n + k; i++) {
cerr<<remove[i];
WriteAdvice(remove[i]);
}
cerr<<endl;
// exit(0);
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;
void Assist(unsigned char *A, int n, int k, int r) {
assert(r == n + k);
bool scaff[n]{};
set<int> s;
for (int i = 0; i < k; i++) {
scaff[i] = true;
if (A[i]) {
s.insert(i);
}
}
for (int i = k; i < n + k; i++) {
int color = GetRequest();
if (A[i] == 0 && scaff[color]) {
s.erase(color);
}
if (!scaff[color]) {
assert(!s.empty());
int rem = *s.begin();
s.erase(s.begin());
PutBack(rem);
scaff[rem] = false;
scaff[color] = true;
}
if (A[i]) {
s.insert(color);
}
}
}