Submission #1334866

#TimeUsernameProblemLanguageResultExecution timeMemory
1334866bearrbearrMinerals (JOI19_minerals)C++20
85 / 100
25 ms3896 KiB
#include "minerals.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int maxn=86000;
int n;
int tmn[maxn+2];

void cek(vector<int>a,vector<int>b,bool type){
  if(a.empty())return;
  if(a.size()==1){
    tmn[a[0]]=b[0]; return;
  }

  vector<int>a1,a2,b1,b2;

  if(type==0){
    int sz=(sqrt(5)-1)/2 *a.size();
    if(sz==0)sz++;
    if(sz==a.size())sz--;

    int prv;
    for(int q=sz;q<a.size();q++){
      prv=Query(a[q]);
    }

    for(int q=0;q<a.size();q++){
      if(q<sz)a1.pb(a[q]);
      else a2.pb(a[q]);
    }

    for(auto x : b){
      int brp=Query(x);
      if(brp!=prv){
        b2.pb(x);
      }
      else{
        b1.pb(x);
      }
      prv=brp;
    }
  }
  else{
    int sz=(3-sqrt(5))/2 *a.size();
    if(sz==0)sz++;
    if(sz==a.size())sz--;

    int prv;
    for(int q=0;q<sz;q++){
      prv=Query(a[q]);
    }

    for(int q=0;q<a.size();q++){
      if(q<sz)a1.pb(a[q]);
      else a2.pb(a[q]);
    }

    for(auto x : b){
      int brp=Query(x);
      if(brp!=prv){
        b2.pb(x);
      }
      else{
        b1.pb(x);
      }
      prv=brp;
    }
  }
  cek(a1,b1,0);
  cek(a2,b2,1);
}

void Solve(int N) {
  n=N;
  vector<int>grup[2];
  int prv=0;
  for(int q=1;q<=2*n;q++){
    int tmp=Query(q);
    if(prv==tmp){
      grup[1].pb(q);
    }
    else{
      grup[0].pb(q);
    }
    prv=tmp;
  }
 
  cek(grup[0],grup[1],0);
  for(int q=1;q<=2*n;q++){
    if(tmn[q]!=0){
      Answer(q,tmn[q]);
    }
  }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...