Submission #170367

#TimeUsernameProblemLanguageResultExecution timeMemory
170367workharderMinerals (JOI19_minerals)C++14
40 / 100
38 ms5720 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; const int MAXN=86005; int lo[MAXN],hi[MAXN],arr[MAXN]; vector<int> mid[MAXN]; int tengah(int x,int y){ return (x+y)/2; } void Solve(int N) { int prev=0,tmpL=1,tmpR=N+1; for(int i=1;i<=2*N;i++){ if(Query(i)==prev){ arr[tmpR]=i; tmpR++; } else{ arr[tmpL]=i; tmpL++; prev++; } } for(int i=1;i<=2*N;i++)Query(i); for(int i=N+1;i<=2*N;i++){ lo[i]=1; hi[i]=N; mid[tengah(lo[i],hi[i])].push_back(i); } int sudah=0; while(sudah<N){ for(int i=1;i<=N;i++){ Query(arr[i]); while(!mid[i].empty()){ int now=mid[i].back(); mid[i].pop_back(); if(Query(arr[now])==i){ hi[now]=i; if(lo[now]<hi[now])mid[tengah(lo[now],hi[now])].push_back(now); else sudah++; } else{ lo[now]=i+1; if(lo[now]<hi[now])mid[tengah(lo[now],hi[now])].push_back(now); else sudah++; } Query(arr[now]); } } for(int i=1;i<=N;i++)Query(arr[i]); } for(int i=N+1;i<=2*N;i++)Answer(arr[i],arr[lo[i]]); }
#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...