Submission #1336456

#TimeUsernameProblemLanguageResultExecution timeMemory
1336456trandaihao5555Last supper (IOI12_supper)C++20
0 / 100
96 ms4636 KiB
#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9 + 7;
const int MaxN = 2e5+7;

int col[MaxN],nxt[MaxN],lst[MaxN],Log;
bool UA[MaxN];

struct cmp {
    bool operator()(int a, int b) {
        return nxt[a] < nxt[b];
    }
};

priority_queue<int,vector<int>,cmp> pq;

void ComputeAdvice(int *C, int N, int K, int M) {
    for (int i=0;i<K;i++) col[i] = i;
    for (int i=0;i<N;i++) col[i + K] = C[i];
    Log = 0;
    while ((1LL<<Log) < N) Log++;
    for (int i=0;i<N;i++) lst[i] = INF;
    for (int i=N+K-1;i>=0;i--) {
        nxt[i] = lst[col[i]];
        lst[col[i]] = i;
    }
    set<int> s;
    for (int i=0;i<N+K;i++) {
        if (s.find(col[i]) == s.end()) {
            if (s.size() >= K) {
                while (!pq.empty() && lst[col[pq.top()]] != pq.top()) pq.pop();
                s.erase(col[pq.top()]);
                pq.pop();
            }
            s.insert(col[i]);
        }
        else {
            UA[lst[col[i]]] = true;
        }
        pq.push(i);
        lst[col[i]] = i;
    }
    for (int i=0;i<N+K;i++) WriteAdvice(UA[i]);
}

#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;

const int MaxN = 2e5+7;

int LOG,C[MaxN];
bool ua[MaxN];

void Assist(unsigned char *A, int N, int K, int R) {
    LOG = 0;
    while ((1LL<<LOG) < N) LOG++;
    for (int i=0;i<N + K;i++) {
        ua[i] = A[i];
    }
    set<int> s1,s2;
    for (int i=0;i<K;i++) {
        if (ua[i]) s1.insert(i);
        else s2.insert(i);
    }
    for (int i=0;i<N;i++) {
        int tmp = GetRequest();
        if (s1.find(tmp) == s1.end() && s2.find(tmp) == s2.end()) {
            PutBack(*(s2.begin()));
            s2.erase(s2.begin());
        }
        if (ua[i+K]) s1.insert(tmp);
        else s2.insert(tmp);
    }
    return;
}
#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...