This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define sp << ' ' <<
#define nl << '\n'
#include "library.h"
void Solve(int n){
vector<array<int, 2>> e;
vector<int> g[n], q(n), ans(n);
for(int _=1; _<n; ++_){
int low = 0, high = n-1;
while(low < high){
int mid = (low + high) / 2;
int exp = mid + 1;
for(auto &i : e) if(i[0] <= mid && i[1] <= mid) --exp;
for(int i=0; i<n; ++i) q[i] = i <= mid;
if(Query(q) == exp) low = mid + 1;
else high = mid;
}
int x = low; low = 0, high = x-1;
while(low < high){
int mid = (low + high) / 2;
int exp = mid + 1;
for(auto &i : e) if(i[0] <= mid && (i[1] <= mid || i[1] == x)) --exp;
for(int i=0; i<n; ++i) q[i] = i <= mid || i == x;
if(Query(q) <= exp) high = mid;
else low = mid + 1;
}
e.push_back({low, x});
g[low].push_back(x);
g[x].push_back(low);
}
int u = -1;
for(int i=0; i<n; ++i) if((int)g[i].size() == 1) u = i;
assert(u >= 0);
for(int i=0; i<n; ++i){
ans[i] = u + 1;
if(i == n-1) break;
u = g[u][i && g[u][0] + 1 == ans[i-1]];
}
Answer(ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |