This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "xylophone.h"
using namespace std;
int a[5005], res[5005];
void solve(int n) {
int l = 1, r = n;
while(l < r) {
int mid = (l + r) >> 1;
int tmp = query(mid, n);
if(tmp != n - 1) r = mid - 1;
else l = mid + 1;
}
res[l] = 1;
a[1] = 1;
if(l > 1) {
res[l - 1] = 1 + query(l - 1, l);
a[res[l - 1]] = 1;
for(int i = l - 2; i >= 1; --i) {
int tmp = query(i, i + 1);
if(res[i + 1] + tmp > n || a[res[i + 1] + tmp]) {
res[i] = res[i + 1] - tmp;
a[res[i]] = 1;
continue;
}
if(res[i + 1] + tmp < 1 || a[res[i + 1] - tmp]) {
res[i] = res[i + 1] + tmp;
a[res[i]] = 1;
continue;
}
int tmp2 = query(i, i + 2);
if(tmp2 == tmp || tmp2 == abs(res[i + 1] - res[i + 2])) {
if(res[i + 1] < res[i + 2]) res[i] = res[i + 1] + tmp;
else res[i] = res[i + 1] - tmp;
}
else {
if(res[i + 1] < res[i + 2]) res[i] = res[i + 1] - tmp;
else res[i] = res[i + 1] + tmp;
}
a[res[i]] = 1;
}
}
if(l < n) {
res[l + 1] = 1 + query(l, l + 1);
a[res[l + 1]] = 1;
for(int i = l + 2; i <= n; ++i) {
int tmp = query(i - 1, i);
if(res[i - 1] + tmp > n || a[res[i - 1] + tmp]) {
res[i] = res[i - 1] - tmp;
a[res[i]] = 1;
continue;
}
if(res[i + 1] + tmp < 1 || a[res[i - 1] - tmp]) {
res[i] = res[i - 1] + tmp;
a[res[i]] = 1;
continue;
}
int tmp2 = query(i - 2, i);
if(tmp2 == tmp || tmp2 == abs(res[i - 1] - res[i - 2])) {
if(res[i - 1] < res[i - 2]) res[i] = res[i - 1] + tmp;
else res[i] = res[i - 1] - tmp;
}
else {
if(res[i - 1] < res[i - 2]) res[i] = res[i - 1] - tmp;
else res[i] = res[i - 1] + tmp;
}
a[res[i]] = 1;
}
}
for(int i = 1; i <= n; ++i) answer(i, res[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... |