#include <bits/stdc++.h>
#include "xylophone.h"
// #include "grader.cpp"
using namespace std;
void solve(int n) {
int l = 1, r = n;
while (l <= r) {
int md = (l + r) >> 1;
if (query(1, md) != n - 1) l = md + 1;
else r = md - 1;
}
int R = l;
vector<int> A(n + 1);
A[R] = n;
if (R != n) {
A[R + 1] = A[R] - query(R, R + 1);
for (int i = R + 2; i <= n; i++) {
int a = A[i - 2], b = A[i - 1]; //c = A[i]
int x = query(i - 2, i), y = query(i - 1, i);
if (a < b) {
if (x == y) A[i] = b - x; //c < a < b
else if (x == b - a) A[i] = b - y; //a < c < b
else if (x > y) A[i] = a + x; //a < b < c
else assert(false);
}
else {
if (x == y) A[i] = b + x; //c > a > b
else if (x == a - b) A[i] = b + y; //a > c > b
else if (x > y) A[i] = a - x; //a > b > c
else assert(false);
}
}
}
if (1 != R) {
A[R - 1] = A[R] - query(R - 1, R);
for (int i = R - 2; i > 0; i--) {
int a = A[i + 2], b = A[i + 1]; //c = A[i]
int x = query(i, i + 2), y = query(i, i + 1);
if (a < b) {
if (x == y) A[i] = b - x; //b > a > c
else if (x == b - a) A[i] = b - y; //b > c > a
else if (x > y) A[i] = a + x; //c > b > a
else assert(false);
}
else {
if (x == y) A[i] = b + x; //b < a < c
else if (x == a - b) A[i] = b + y; //b < c < d
else if (x > y) A[i] = a - x; //a < b < c
else assert(false);
}
}
}
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... |