Submission #1336291

#TimeUsernameProblemLanguageResultExecution timeMemory
1336291boclobanchatLast supper (IOI12_supper)C++20
100 / 100
92 ms5332 KiB
#include"advisor.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
const int INF=1e9;
pair<int,int> seg[MAXN*4];
int nex[MAXN],pos[MAXN],F[MAXN];
void build(int l,int r,int pos)
{
	if(l==r)
	{
		seg[pos]={-1,l};
		return ;
	}
	int mid=(l+r)/2;
	build(l,mid,pos*2);
	build(mid+1,r,pos*2+1);
	seg[pos]=max(seg[pos*2],seg[pos*2+1]);
}
void update(int l,int r,int i,int val,int pos)
{
	if(i<l||r<i) return ;
	if(l==r)
	{
		seg[pos]={val,l};
		return ;
	}
	int mid=(l+r)/2;
	update(l,mid,i,val,pos*2);
	update(mid+1,r,i,val,pos*2+1);
	seg[pos]=max(seg[pos*2],seg[pos*2+1]);
}
int get(int l,int r,int i,int pos)
{
	if(l==r) return seg[pos].first;
	int mid=(l+r)/2;
	if(i<=mid) return get(l,mid,i,pos*2);
	return get(mid+1,r,i,pos*2+1);
}
void ComputeAdvice(int *C,int N,int K,int M)
{
	for(int i=0;i<N;i++) pos[i]=N,F[i]=i-N;
	for(int i=N-1;i+1;i--) nex[i]=pos[C[i]],pos[C[i]]=i;
	build(0,N-1,1);
	for(int i=0;i<K;i++) update(0,N-1,i,pos[i],1);
	string s;
	for(int i=0;i<N*2;i++) s+='0';
	for(int i=0;i<N;i++)
	{
		if(get(0,N-1,C[i],1)==-1)
		{
			int res=seg[1].second;
			s[F[res]+N]='1';
			update(0,N-1,res,-1,1);
		}
		update(0,N-1,C[i],nex[i],1);
		F[C[i]]=i;
	}
	for(int i=0;i<N*2;i++) WriteAdvice(s[i]-'0');
}
#include"assistant.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
bool ck[MAXN];
stack<int> st;
void Assist(unsigned char *A,int N,int K,int R)
{
	for(int i=0;i<N;i++) if(int(A[i])) st.push(i);
	for(int i=0;i<K;i++) ck[i]=true;
	for(int i=0;i<N;i++)
	{
		int res=GetRequest();
		if(!ck[res])
		{
			PutBack(st.top());
			ck[st.top()]=false,st.pop();
		}
		ck[res]=true;
		if(int(A[i+N])) st.push(res);
	}
}
#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...