#include <bits/stdc++.h>
#include "xylophone.h"
using namespace std;
const int N = 5e3+1;
int ans[N], n;
bool us[N];
// [i, j, k]
int que(int l, int r) {
return query(min(l, r), max(l, r));
}
int val(int i, int j, int k, int l) {
int p=que(k, i), res=0;
int y=ans[k], a=ans[j];
assert(y != a+l), assert(y != a-l);
if (y > a+l) {
if (p == y-a) res=a+l;
else res=a-l;
} else if (y > a && y < a+l) {
if (p == l) res=a+l;
else res=a-l;
} else if (y < a && y > a-l) {
if (p == l) res=a-l;
else res=a+l;
} else if (y < a-l) {
if (p == a-y) res=a-l;
else res=a+l;
}
assert(1 <= res && res <= n);
assert(!us[res]);
return res;
}
void solve(int np) {
n=np;
int l=1, r=n, x=1;
while (l <= r) {
int m=(l+r)/2;
if (que(1, m) == n-1) r=m-1, x=m;
else l=m+1;
} ans[x]=n;
if (x < n) ans[x+1]=n-que(x, x+1), us[ans[x+1]]=true;
if (x > 1) ans[x-1]=n-que(x-1, x), us[ans[x-1]]=true;
us[n]=true;
for (int i=x+2; i<=n; ++i) {
int l=que(i-1, i);
if (ans[i-1]+l > n || us[ans[i-1]+l]) ans[i]=ans[i-1]-l;
else if (ans[i-1]-l < 1 || us[ans[i-1]-l]) ans[i]=ans[i-1]+l;
else ans[i]=val(i, i-1, i-2, l);
us[ans[i]]=true;
}
for (int i=x-2; i>=1; --i) {
int l=que(i, i+1);
if (ans[i+1]+l > n || us[ans[i+1]+l]) ans[i]=ans[i+1]-l;
else if (ans[i+1]-l < 1 || us[ans[i+1]-l]) ans[i]=ans[i+1]+l;
else ans[i]=val(i, i+1, i+2, l);
us[ans[i]]=true;
}
for (int i=1; i<=n; ++i) {
assert(ans[i] > 0);
answer(i, ans[i]);
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
208 KB |
Output is correct |
4 |
Correct |
2 ms |
208 KB |
Output is correct |
5 |
Correct |
2 ms |
208 KB |
Output is correct |
6 |
Correct |
2 ms |
208 KB |
Output is correct |
7 |
Correct |
2 ms |
208 KB |
Output is correct |
8 |
Correct |
1 ms |
208 KB |
Output is correct |
9 |
Correct |
3 ms |
208 KB |
Output is correct |
10 |
Correct |
2 ms |
208 KB |
Output is correct |
11 |
Correct |
2 ms |
208 KB |
Output is correct |
12 |
Correct |
2 ms |
208 KB |
Output is correct |
13 |
Correct |
2 ms |
208 KB |
Output is correct |
14 |
Correct |
2 ms |
208 KB |
Output is correct |
15 |
Correct |
2 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
208 KB |
Output is correct |
4 |
Correct |
2 ms |
208 KB |
Output is correct |
5 |
Correct |
2 ms |
208 KB |
Output is correct |
6 |
Correct |
2 ms |
208 KB |
Output is correct |
7 |
Correct |
2 ms |
208 KB |
Output is correct |
8 |
Correct |
1 ms |
208 KB |
Output is correct |
9 |
Correct |
3 ms |
208 KB |
Output is correct |
10 |
Correct |
2 ms |
208 KB |
Output is correct |
11 |
Correct |
2 ms |
208 KB |
Output is correct |
12 |
Correct |
2 ms |
208 KB |
Output is correct |
13 |
Correct |
2 ms |
208 KB |
Output is correct |
14 |
Correct |
2 ms |
208 KB |
Output is correct |
15 |
Correct |
2 ms |
208 KB |
Output is correct |
16 |
Correct |
4 ms |
208 KB |
Output is correct |
17 |
Correct |
8 ms |
208 KB |
Output is correct |
18 |
Correct |
12 ms |
208 KB |
Output is correct |
19 |
Correct |
14 ms |
292 KB |
Output is correct |
20 |
Correct |
16 ms |
292 KB |
Output is correct |
21 |
Correct |
13 ms |
308 KB |
Output is correct |
22 |
Correct |
16 ms |
208 KB |
Output is correct |
23 |
Correct |
11 ms |
208 KB |
Output is correct |
24 |
Correct |
11 ms |
288 KB |
Output is correct |
25 |
Correct |
10 ms |
312 KB |
Output is correct |
26 |
Correct |
11 ms |
312 KB |
Output is correct |
27 |
Correct |
11 ms |
208 KB |
Output is correct |
28 |
Correct |
17 ms |
308 KB |
Output is correct |
29 |
Correct |
17 ms |
208 KB |
Output is correct |
30 |
Correct |
13 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
208 KB |
Output is correct |
4 |
Correct |
2 ms |
208 KB |
Output is correct |
5 |
Correct |
2 ms |
208 KB |
Output is correct |
6 |
Correct |
2 ms |
208 KB |
Output is correct |
7 |
Correct |
2 ms |
208 KB |
Output is correct |
8 |
Correct |
1 ms |
208 KB |
Output is correct |
9 |
Correct |
3 ms |
208 KB |
Output is correct |
10 |
Correct |
2 ms |
208 KB |
Output is correct |
11 |
Correct |
2 ms |
208 KB |
Output is correct |
12 |
Correct |
2 ms |
208 KB |
Output is correct |
13 |
Correct |
2 ms |
208 KB |
Output is correct |
14 |
Correct |
2 ms |
208 KB |
Output is correct |
15 |
Correct |
2 ms |
208 KB |
Output is correct |
16 |
Correct |
4 ms |
208 KB |
Output is correct |
17 |
Correct |
8 ms |
208 KB |
Output is correct |
18 |
Correct |
12 ms |
208 KB |
Output is correct |
19 |
Correct |
14 ms |
292 KB |
Output is correct |
20 |
Correct |
16 ms |
292 KB |
Output is correct |
21 |
Correct |
13 ms |
308 KB |
Output is correct |
22 |
Correct |
16 ms |
208 KB |
Output is correct |
23 |
Correct |
11 ms |
208 KB |
Output is correct |
24 |
Correct |
11 ms |
288 KB |
Output is correct |
25 |
Correct |
10 ms |
312 KB |
Output is correct |
26 |
Correct |
11 ms |
312 KB |
Output is correct |
27 |
Correct |
11 ms |
208 KB |
Output is correct |
28 |
Correct |
17 ms |
308 KB |
Output is correct |
29 |
Correct |
17 ms |
208 KB |
Output is correct |
30 |
Correct |
13 ms |
208 KB |
Output is correct |
31 |
Correct |
20 ms |
288 KB |
Output is correct |
32 |
Correct |
40 ms |
296 KB |
Output is correct |
33 |
Correct |
51 ms |
308 KB |
Output is correct |
34 |
Correct |
58 ms |
288 KB |
Output is correct |
35 |
Correct |
58 ms |
308 KB |
Output is correct |
36 |
Correct |
44 ms |
304 KB |
Output is correct |
37 |
Correct |
44 ms |
300 KB |
Output is correct |
38 |
Correct |
58 ms |
308 KB |
Output is correct |
39 |
Correct |
56 ms |
308 KB |
Output is correct |
40 |
Correct |
56 ms |
300 KB |
Output is correct |
41 |
Correct |
54 ms |
304 KB |
Output is correct |
42 |
Correct |
36 ms |
312 KB |
Output is correct |
43 |
Correct |
42 ms |
316 KB |
Output is correct |
44 |
Correct |
35 ms |
320 KB |
Output is correct |
45 |
Correct |
57 ms |
292 KB |
Output is correct |
46 |
Correct |
76 ms |
316 KB |
Output is correct |
47 |
Correct |
56 ms |
328 KB |
Output is correct |
48 |
Correct |
68 ms |
308 KB |
Output is correct |
49 |
Correct |
72 ms |
296 KB |
Output is correct |
50 |
Correct |
53 ms |
304 KB |
Output is correct |
51 |
Correct |
51 ms |
296 KB |
Output is correct |
52 |
Correct |
57 ms |
308 KB |
Output is correct |
53 |
Correct |
61 ms |
304 KB |
Output is correct |
54 |
Correct |
53 ms |
296 KB |
Output is correct |
55 |
Correct |
58 ms |
300 KB |
Output is correct |
56 |
Correct |
48 ms |
428 KB |
Output is correct |
57 |
Correct |
53 ms |
296 KB |
Output is correct |
58 |
Correct |
64 ms |
304 KB |
Output is correct |
59 |
Correct |
57 ms |
300 KB |
Output is correct |
60 |
Correct |
49 ms |
316 KB |
Output is correct |