Submission #122079

#TimeUsernameProblemLanguageResultExecution timeMemory
122079TadijaSebezLast supper (IOI12_supper)C++11
20 / 100
501 ms83400 KiB
#include <bits/stdc++.h>
using namespace std;
#include "advisor.h"
#define pb push_back

void ComputeAdvice(int *C, int N, int K, int M)
{
	int L=__builtin_clz(0)-__builtin_clz(N-1);
	function<void(int)> WriteInt=[&](int x)
	{
		for(int i=0;i<L;i++) WriteAdvice(x&1),x>>=1;
	};
	for(int i=0;i<N;i++) WriteInt(C[i]);
}
#include <bits/stdc++.h>
using namespace std;
#include "assistant.h"
#define pb push_back

void Assist(unsigned char *A, int N, int K, int R)
{
	int L=__builtin_clz(0)-__builtin_clz(N-1);
	int cur=0;
	function<int()> ReadInt=[&]()
	{
		int ans=0;
		for(int i=0;i<L;i++)
		{
			if(A[cur++]) ans+=1<<i;
		}
		return ans;
	};
	vector<int> reqs;
	for(int i=0;i<N;i++) reqs.pb(ReadInt());
	vector<queue<int>> pos;
	pos.resize(N);
	for(int i=0;i<N;i++) pos[reqs[i]].push(i);
	for(int i=0;i<N;i++) pos[i].push(N);
	vector<bool> in(N,0);
	set<pair<int,int>> st;
	function<void(int,int)> push=[&](int x, int tm)
	{
		while(pos[x].front()<=tm) pos[x].pop();
		int t=pos[x].front();
		st.insert({t,x});
		in[x]=1;
	};
	for(int i=0;i<K;i++) push(i,-1);
	for(int i=0;i<N;i++)
	{
		int req=GetRequest();
		if(in[req])
		{
			st.erase({pos[req].front(),req});
			push(req,i);
		}
		else
		{
			int down=st.rbegin()->second;
			st.erase(--st.end());
			in[down]=0;
			push(req,i);
			PutBack(down);
		}
	}
}
#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...