# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1150689 | mingga | Xylophone (JOI18_xylophone) | C++20 | 0 ms | 0 KiB |
#include "xylophone.h"
static int a[5005];
void solve(int n) {
a[1] = 0;
a[2] = query(1, 2);
int mxid = 2, mnid = 1;
for(int i = 3; i <= n; i++) {
int x1 = a[i - 1] - a[i - 2];
int x2 = query(i - 1, i);
int x3 = query(i - 2, i);
int sign = (x1 > 0 ? 1 : -1);
if(x1 + x2 == x3) {
a[i] = x1 + x2 * sign;
} else {
a[i] = x1 - x2 * sign;
}
if(a[i] > a[mxid]) mxid = i;
if(a[i] < a[mnid]) mnid = i;
}
if(mxid < mnid) {
for(int i = 1; i <= n; i++) a[i] = -a[i];
swap(mnid, mxid);
}
int ext = 1 - a[mnid];
for(int i = 1; i <= n; i++) {
answer(i, a[i] + ext);
}
}