Submission #521782

#TimeUsernameProblemLanguageResultExecution timeMemory
521782qwerasdfzxclPark (JOI17_park)C++14
67 / 100
356 ms708 KiB
#include "park.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; static int Place[1400]; int a[2020]; int ask(int x, int y){return Ask(min(x, y), max(x, y), Place);} void answer(int x, int y){Answer(min(x, y), max(x, y));} void _sort(int n){ vector<int> ans = {0}; for (int i=1;i<n;i++){ fill(Place, Place+1400, 1); int l = 1, r = (int)ans.size()-1, idx = 0; while(l<=r){ int m = (l+r)>>1; for (int j=m;j<(int)ans.size();j++) Place[ans[j]] = 0; if (ask(0, i)) r = m-1; else l = m+1, idx = m; for (int j=m;j<(int)ans.size();j++) Place[ans[j]] = 1; } ans.insert(ans.begin()+idx+1, i); } for (int i=0;i<n;i++) a[i] = ans[i]; } vector<pair<int, int>> D; int cnt = 1; void Find(int x){ //for (auto &p:D) printf("(%d, %d) ", p.first, p.second); //printf("\n"); fill(Place, Place+1400, 1); int l = 1, r = cnt-1, idx = 0; while(l<=r){ int m = (l+r)>>1; for (int i=m;i<cnt;i++) Place[D[i].first] = 0; if (!ask(0, x)) idx = m, l = m+1; else r = m-1; for (int i=m;i<cnt;i++) Place[D[i].first] = 1; } answer(D[idx].first, x); int pt = 0; for (;pt<cnt;pt++) if (D[pt].second > D[idx].second+1) break; D.insert(D.begin()+pt, make_pair(x, D[idx].second+1)); cnt++; } void Detect(int T, int N) { for (int i=1;i<N;i++) a[i] = i; _sort(N); //printf("A = "); //for (int i=0;i<N;i++) printf("%d ", a[i]); //printf("\n"); D.emplace_back(0, 0); for (int i=1;i<N;i++){ Find(a[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...