Submission #1154154

#TimeUsernameProblemLanguageResultExecution timeMemory
1154154byunjaewooLast supper (IOI12_supper)C++20
0 / 100
56 ms4680 KiB
#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]=C[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+1);
  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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...