Submission #571866

#TimeUsernameProblemLanguageResultExecution timeMemory
571866sofapudenLast supper (IOI12_supper)C++14
100 / 100
231 ms14324 KiB
#include <bits/stdc++.h>
#include "advisor.h"

using namespace std;

void ComputeAdvice(int *c, int n, int k, int m) {
	vector<int> ord;
	vector<int> nxt(n+k);
	vector<int> prv(n+k);
	map<int,int> M;
	for(int i = 0; i < k; ++i)ord.push_back(i);
	for(int i = 0; i < n; ++i)ord.push_back(c[i]);
	for(int i = 0; i < n+k; ++i){
		if(M.find(ord[i]) == M.end())prv[i] = -1;
		else prv[i] = M[ord[i]];
		M[ord[i]] = i;
	}
	M.clear();
	for(int i = n+k-1; ~i; --i){
		if(!M[ord[i]])nxt[i] = n+k;
		else nxt[i] = M[ord[i]];
		M[ord[i]] = i;
	}
	vector<int> rem(n+k,0);
	multiset<int> pq;
	for(int i = 0; i < k; ++i){
		pq.insert(nxt[i]);
	}
	for(int i = k; i < n+k; ++i){
		if(pq.count(i)){
			pq.insert(nxt[i]);
			pq.erase(i);
			rem[prv[i]] = 1;
			continue;
		}
		pq.erase(prev(pq.end()));
		pq.insert(nxt[i]);
	}
	for(auto x : rem){
		WriteAdvice(x);
	}
}
#include <bits/stdc++.h>
#include "assistant.h"

using namespace std;

void Assist(unsigned char *a, int n, int k, int r) {
	set<int> on;
	vector<int> ord;
	for(int i = 0; i < k; ++i){
		on.insert(i);
		ord.push_back(i);
	}
	int cn = 0;
	int cn2 = 0;
	for(int i = 0; i < n; ++i){
    	int req = GetRequest();
		ord.push_back(req);
		if(on.count(req))continue;
		while(a[cn2++] == 1)cn++;
		on.insert(req);
		on.erase(ord[cn]);
		PutBack(ord[cn++]);
	}
}

/* 
 * Query types:
 * GetRequest()
 * PutBack(int x)
 *
 */
#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...