제출 #170369

#제출 시각아이디문제언어결과실행 시간메모리
170369workharderMinerals (JOI19_minerals)C++14
40 / 100
64 ms7480 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 (3*x+2*y)/5; } void Solve(int N) { int prev=0,tmpL=1,tmpR=N+1,nxt; 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=N+1;i<=2*N;i++){ lo[i]=1; hi[i]=N; mid[tengah(lo[i],hi[i])].push_back(i); } int sudah=0,prefix=0; while(sudah<N){ for(int i=1;i<=N;i++){ prev=Query(arr[i]); while(!mid[i].empty()){ int now=mid[i].back(); mid[i].pop_back(); nxt=Query(arr[now]); if(prefix){ if(nxt==prev){ //sudah ada 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++; } } else{ if(nxt==prev){ lo[now]=i+1; if(lo[now]<hi[now])mid[tengah(lo[now],hi[now])].push_back(now); else sudah++; } else{ hi[now]=i; if(lo[now]<hi[now])mid[tengah(lo[now],hi[now])].push_back(now); else sudah++; } } prev=nxt; } } prefix=1-prefix; } 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...