| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 363121 | eric_xiao | Last supper (IOI12_supper) | C++14 | 1141 ms | 23560 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "advisor.h"
#define ll long long
#define pii pair<int,int>
#define F first
#define S second
using namespace std;
int st[100009],th[100009],in[100009],last[100009];
set<int> occ[100009];
set<pii> nw;
const int inf = 1000000;
void ComputeAdvice(int *C, int N, int K, int M) {
    int i,j,k;
    for(i = 0;i < N;i++)
    {
        occ[C[i]].insert(i);
        last[i] = -1;
    }
    for(i = 0;i < N;i++)
    {
        occ[i].insert(inf);
    }
    for(i = 0;i < K;i++)
    {
        in[i] = 1;
        nw.insert({*occ[i].begin(),i});
    }
    for(i = 0;i < N;i++)
    {
        last[C[i]] = i;
        if(in[C[i]] == 1)
        {
            auto p = nw.lower_bound({i,C[i]});
            pii t = {*occ[i].upper_bound(i),C[i]};
            nw.erase(p);
            nw.insert(t);
            continue;
        }
        auto u = prev(nw.end());
        if(last[u->S] == -1)
        {
            st[u->S] = 1;
        }
        else
        {
            th[last[u->S]] = 1;
        }
        pii t = {*occ[i].upper_bound(i),C[i]};
        nw.erase(u);
        nw.insert(t);
    }
    for(auto x : nw)
    {
        if(last[x.S] == -1)
        {
            st[x.S] = 1;
        }
        else
        {
            th[last[x.S]] = 1;
        }
    }
    for(i = 0;i < N;i++)
    {
        if(st[i] == 0)WriteAdvice(0);
        else WriteAdvice(1);
    }
    for(i = 0;i < N;i++)
    {
        if(th[i] == 0)WriteAdvice(0);
        else WriteAdvice(1);
    }
}
#include<bits/stdc++.h>
#include "assistant.h"
#define ll long long
#define pii pair<int,int>
#define F first
#define S second
using namespace std;
set<int> ok;
int C[100009];
set<int> inn;
void Assist(unsigned char *A, int N, int K, int R) {
    int i,k;
    for(i = 0;i < N*2;i++)
    {
        cerr << A[i] << ' ';
    }
   cerr << endl;
    for(i = 0;i < N;i++)
    {
        if(A[i] == 1 && i < K)
        {
            ok.insert(i);
        }
    }
    for(i = 0;i < K;i++)inn.insert(i);
    for(i = 0;i < N;i++)
    {
        C[i] = GetRequest();
        if(!inn.count(C[i]))
        {
            PutBack((int)(*ok.begin()));
            inn.erase(*ok.begin());
            ok.erase(*ok.begin());
            inn.insert(C[i]);
        }
        if(A[N+i] == 1) ok.insert(C[i]);
        if(A[N+i] == 0 && ok.count(C[i])) ok.erase(C[i]);
    }
}
Compilation message (stderr)
| # | 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... | ||||
