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>
#include <cassert>
#include "library.h"
using namespace std;
typedef int ll;
vector<ll> asdf;
vector<ll> chk;
vector<ll> p, e;
ll n;
void randp(ll N) {
p.resize(N);
ll i;
for (i = 0; i < N; i++) p[i] = i + 1;
for (i = N - 1; i >= 1; i--) {
ll a;
a = rand() % i;
swap(p[i], p[a]);
}
}
ll cnt = 0;
ll query(vector<ll> &v) {
cnt++;
vector<ll> a;
a.resize(n);
for (auto x : v) a[x - 1] = 1;
return Query(a);
}
void Solve(int N) {
n = N;
srand(time(NULL));
chk.resize(N + 1);
ll i, a;
ll sz = N;
for (a = 1; a <= N; a++) {
asdf.clear();
for (ll i = 1; i <= N; i++) if (!chk[i]) asdf.push_back(i);
sz = asdf.size();
if (asdf.size() <= 2) {
e.push_back(asdf[0]);
chk[asdf[0]] = 1;
continue;
}
vector<ll> q1, q2;
do {
randp(sz);
q1.clear();
q2.clear();
for (i = 0; i < sz; i++) {
if (p[i] <= sz / 2) q1.push_back(asdf[i]);
else q2.push_back(asdf[i]);
}
} while ((query(q1) + query(q2)) % 2);
ll l, r;
l = 0, r = q1.size() - 1;
vector<ll> v1, v2;
while (l < r) {
v1 = q1;
v2 = q2;
ll mid = (l + r) / 2;
for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]);
for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back();
if ((query(v1) + query(v2)) % 2) l = mid + 1;
else r = mid;
}
e.push_back(q1[r]);
chk[q1[r]] = 1;
}
deque<ll> d;
for (i = N - 1; i >= 0; i--) {
if (d.empty()) {
d.push_back(e[i]);
continue;
}
ll b = d.back();
vector<ll> v;
v.push_back(b);
v.push_back(e[i]);
if (query(v) == 1) d.push_back(e[i]);
else d.push_front(e[i]);
}
vector<ll> ans;
while (!d.empty()) {
ans.push_back(d.back());
d.pop_back();
}
Answer(ans);
}
Compilation message (stderr)
library.cpp: In function 'void Solve(int)':
library.cpp:65:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
65 | for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]);
| ~~^~~~~~~~~~~
library.cpp:66:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
66 | for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back();
| ~~^~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |