Submission #915462

#TimeUsernameProblemLanguageResultExecution timeMemory
915462guagua0407Minerals (JOI19_minerals)C++17
70 / 100
21 ms2996 KiB
#include "minerals.h" #include<bits/stdc++.h> using namespace std; #define f first #define s second vector<int> a; vector<int> belong; vector<pair<int,int>> vec; void go(int l,int r,vector<int> &b,int id){ if(l==r){ Query(a[l]); assert((int)b.size()==1); vec.push_back({a[l],b[0]}); return; } int mid=(l+r)/2; int cur=0; if(id==0){ for(int i=l;i<=mid;i++){ cur=Query(a[i]); } } else{ for(int i=mid+1;i<=r;i++){ cur=Query(a[i]); } } vector<int> ls,rs; for(auto v:b){ if(belong[v]<=mid){ ls.push_back(v); continue; } int x=Query(v); if(x==cur){ ls.push_back(v); } else{ rs.push_back(v); } cur=x; } vector<int>().swap(b); go(l,mid,ls,1); go(mid+1,r,rs,0); } void Solve(int n){ vector<bool> ok(2*n+1); int prv=0; for(int i=1;i<=2*n;i++){ int x=Query(i); if(x==prv+1){ ok[i]=true; } prv=x; } vector<int> b; int cnt=-1; belong.resize(2*n+1); for(int i=1;i<=2*n;i++){ if(ok[i]){ a.push_back(i); cnt++; } else{ b.push_back(i); belong[i]=cnt; } } go(0,n-1,b,1); for(auto v:vec){ Answer(v.f,v.s); } }
#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...