Submission #26684

#TimeUsernameProblemLanguageResultExecution timeMemory
26684samir_droubiLast supper (IOI12_supper)C++14
0 / 100
164 ms19736 KiB

#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;
void ComputeAdvice(int *C, int N, int K, int M)
{
    const int mxn=(1e5)+5;
    bool ans[mxn*2];
    int ord[mxn];

    for(int i=0;i<K;++i)ord[i]=-1;

    set<pair<int,int> >s;

    vector<int>v[mxn];

    for(int i=0;i<N;++i)
      v[C[i]].push_back(i);

    for(int i=0;i<N;++i)
      v[i].push_back(N);

    for(int i=0;i<N;++i)
      reverse(v[i].begin(),v[i].end());

    for(int i=0;i<K;++i)
    {
      s.insert({v[i].back(),i});
      v[i].pop_back();
    }
    for(int i=0;i<N;++i)
    {
      if(s.count({i,C[i]}))
      {
        if(ord[C[i]]!=-1)ans[ord[C[i]]+N]=true;
        else ans[C[i]]=true;
      }
      else
      {
        set<pair<int,int> >::iterator it=s.end();
        --it;
        s.erase(it);
      }
      ord[C[i]]=i;
      s.insert({v[C[i]].back(),C[i]});
      v[C[i]].pop_back();
    }
    for(int i=0;i<2*N;++i)
      WriteAdvice(ans[i]);
}

#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;
void Assist(unsigned char *A, int N, int K, int R)
{
  const int mxn=(1e5)+5;
  vector<int>del;
  bool sc[mxn];
  for(int i=0;i<K;++i)
  {
    if(A[i]==0)del.push_back(i);
    sc[i]=true;
  }
  int it=0;
  for(int i=0;i<N;++i)
  {
    int r=GetRequest();
    if(sc[r])continue;
    if(A[r+N]==0)del.push_back(r);
    sc[del[it]]=false;
    PutBack(del[it]);
    ++it;
    sc[r]=true;
  }
}
#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...