#include "xylophone.h"
#include <bits/stdc++.h>
using namespace std;
void solve(int N) {
int value = query(1, N);
int L = 1, hi = N;
while (L < hi) {
int mid = L + (hi - L + 1) / 2;
if (query(mid, N) == value) L = mid;
else hi = mid - 1;
}
vector<int> ans(N+1, -1);
set<int> avail; for (int i = 2; i <= N; i++) avail.insert(i);
for (int idx = 0; idx < N; idx++) {
int i = (L + idx <= N) ? L+idx : L - ((L+idx) - N);
if (i == L) ans[i] = 1;
else if (i == L+1) ans[i] = 1 + query(L, i);
else if (i == L-1) ans[i] = 1 + query(i, L);
else {
int dx = i>L ? query(i-1, i) : query(i, i+1);
int a = ans[i>L ? i-1 : i+1] + dx, b = ans[i>L ? i-1 : i+1] - dx;
int x = ans[i>L ? i-2 : i+2], y = ans[i>L ? i-1 : i+1];
if (!avail.count(a)) ans[i] = b;
else if (!avail.count(b)) ans[i] = a;
else {
int dy = i>L ? query(i-2, i) : query(i, i+2);
if (y < a && a < x && dy == x-y) ans[i] = a;
else if (y < x && x < a && dy == a-y) ans[i] = a;
else if (x < y && y < a && dy == a-x) ans[i] = a;
else ans[i] = b;
}
}
avail.erase(ans[i]);
answer(i, ans[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... |