# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1253901 | terracottalite | Xylophone (JOI18_xylophone) | C++20 | 0 ms | 0 KiB |
#include <stdio.h>
#include <stdlib.h>
/*
int query(int l, int r) {
int ret;
printf("%d %d\n", l, r);
fflush(stdout);
scanf("%d", &ret);
fflush(stdout);
return ret;
}
*/
void solve(int n) {
int l = 2;
int r = n+1;
int a[5005] = { 0 };
a[n] = 0;
a[n-1] = query(n-1, n);
for (int i=n-2;i>=1;i--) {
int x = query(i, i+1);
int y = query(i, i+2);
if (y == abs(a[i+1]+x - a[i+2])) a[i] = a[i+1]+x;
else if (y == abs(a[i+1]-x - a[i+2])) a[i] = a[i+1]-x;
else {
if (a[i+2] > a[i+1]) a[i] = a[i+1] + x;
else a[i] = a[i+1] - x;
}
}
int mx1 = -100000;
int mx2 = -1;
int mn1 = 100000;
int mn2 = -1;
for (int i=1;i<=n;i++) {
if (a[i] > mx1) {
mx1 = a[i];
mx2 = i;
}
if (a[i] < mn1) {
mn1 = a[i];
mn2 = i;
}
}
if (mx2 < mn2) {
for (int i=1;i<=n;i++) {
a[i] = -a[i] + mx1 + 1;
}
} else {
for (int i=1;i<=n;i++) {
a[i] = a[i] - mn1 + 1;
}
}
for (int i=1;i<=n;i++) {
//printf("%d ", a[i]);
answer(i, a[i]);
}
}
/*
int main()
{
solve(5);
}
*/
// 21534