#include<bits/stdc++.h>
#include "advisor.h"
using namespace std;
void ComputeAdvice(int *C, int N, int K, int M) {
  vector<queue<int>> v(N);
  for (int i=0; i<N; i++) v[C[i]].push(i);
  for (int i=0; i<N; i++) v[i].push(N);
  set<pair<int,int>> s;
  for (int i=0; i<K; i++) s.insert({-v[i].front(), i});
  vector<int> m(K+N, 0);
  unordered_map<int,int> um;
  for (int i=0; i<K; i++) um[i] = i;
  for (int i=0; i<N; i++){
    if (s.find({-v[C[i]].front(), C[i]}) != s.end()){
      m[um[C[i]]] = 1;
      s.erase({-v[C[i]].front(), C[i]});
    }
    else s.erase(s.begin());
    v[C[i]].pop();
    s.insert({-v[C[i]].front(), C[i]});
    um[C[i]] = K+i;
  }
  for (int x : m) WriteAdvice(x);
}
#include<bits/stdc++.h>
#include "assistant.h"
using namespace std;
void Assist(unsigned char *A, int N, int K, int R) {
  unordered_set<int> a, b;
  for (int i=0; i<K; i++){
    if (A[i]) a.insert(i);
    else b.insert(i);
  }
  for (int i=0; i<N; i++){
    int cur = GetRequest();
    if (a.find(cur) == a.end()){
      PutBack(*b.begin());
      b.erase(b.begin());
    }
    else a.erase(cur);
    if (A[i+K]) a.insert(cur);
    else b.insert(cur);
  }
}
| # | 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... |