#include <bits/stdc++.h>
using namespace std;
#include "advisor.h"
void ComputeAdvice(int *C, int N, int K, int M) {
vector<int> X(N+K, 0);
for(int i=0; i<K; i++) X[i]=i;
for(int i=K; i<N+K; i++) X[i]=C[i-K];
set<pair<int, int>> st;
vector<int> lst(N, 0), nxt(N+K, N+K);
vector<bool> chk(N, false), ret(N+K, true);
for(int i=N+K-1; i>=0; i--) {
if(lst[X[i]]) nxt[i]=lst[X[i]];
lst[X[i]]=i;
}
fill(lst.begin(), lst.end(), 0);
for(int i=0; i<K; i++) chk[i]=true, lst[i]=i, st.insert({nxt[i], i});
for(int i=0; i<N; i++) {
if(!chk[C[i]]) ret[st.rbegin()->second]=false, chk[X[st.rbegin()->second-K]]=false, st.erase(prev(st.end()));
else st.erase({i, lst[C[i]]});
st.insert({nxt[K+i], C[i]}), chk[C[i]]=true, lst[C[i]]=i;
}
for(int i=0; i<N+K; i++) WriteAdvice(ret[i]);
}
#include <bits/stdc++.h>
using namespace std;
#include "assistant.h"
void Assist(unsigned char *A, int N, int K, int R) {
set<pair<int, int>> st;
vector<bool> chk(N, false);
vector<int> lst(N, 0);
vector<int> X(N+K, 0);
for(int i=0; i<K; i++) X[i]=i, st.insert({A[i], i}), chk[i]=true, lst[i]=i;
for(int i=0; i<N; i++) {
X[K+i]=GetRequest();
if(!chk[X[K+i]]) chk[X[st.begin()->second]]=false, PutBack(X[st.begin()->second]), st.erase(st.begin());
else st.erase({A[lst[X[K+i]]], lst[X[K+i]]});
st.insert({A[K+i], K+i}), chk[X[K+i]]=true, lst[X[K+i]]=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... |