#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;
#define ll long long
#define F first
#define S second
#define pb push_back
#define pii pair<int, int>
int vis[5005];
int a[5005];
int nn;
bool valid(int x) {
return (x >= 1 && x <= nn && !vis[x]);
}
void solve(int n) {
nn = n;
int l = 1;
int r = n;
int id = 0;
while(l <= r) {
int mid = (l + r) / 2;
if (query(1, mid) == n - 1) {
r = mid - 1;
id = mid;
}
else {
l = mid + 1;
}
}
a[id] = n;
a[id + 1] = n - query(id, id + 1);
a[id - 1] = n - query(id - 1, id);
vis[n] = 1;
vis[a[id + 1]] = 1;
vis[a[id - 1]] = 1;
for (int i = id + 2; i <= n; i++) {
int t = query(i - 1, i);
int t1 = a[i - 1] - t;
int t2 = a[i - 1] + t;
if (valid(t1) && valid(t2)) {
t = query(i - 2, i);
if (valid(a[i - 2] + t)) {
if (a[i - 2] + t == t1 || a[i - 2] + t == t2) {
a[i] = a[i - 2] + t;
vis[a[i - 2] + t] = 1;
}
}
else if (valid(a[i - 2] - t)) {
if (a[i - 2] - t == t1 || a[i - 2] - t == t2) {
a[i] = a[i - 2] - t;
vis[a[i - 2] - t] = 1;
}
}
}
else if (valid(t1)) {
vis[t1] = 1;
a[i] = t1;
}
else {
vis[t2] = 1;
a[i] = t2;
}
}
for (int i = 1; i <= n; i++) {
answer(i, a[i]);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |