#include "xylophone.h"
#include <bits/stdc++.h>
using namespace std;
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<long long,int>pii;
typedef pair<pii,pii>pi2;
void solve(int n) {
//find index of value 1
int l=1;
int r=n;
int mid;
int one=1;
while(l<=r){
mid=(l+r)/2;
int hold=query(mid,n);
if(hold==n-1){
one=mid;
l=mid+1;;
}
else r=mid-1;
}
int ans[n+5];
memset(ans,-1,sizeof(ans));
ans[one]=1;
set<int>se;
for(int x=2;x<=n;x++){
se.insert(x);
}
//neighbour values
if(one>1){
ans[one-1]=1+query(one-1,one);
se.erase(ans[one-1]);
}
if(one<n){
ans[one+1]=1+query(one,one+1);
se.erase(ans[one+1]);
}
int st=1;
int ed=n;
if(one==1){
ed=n-1;
}
else st=2;
//recover other values
for(int x=one-2;x>=st;x--){
int a=query(x,x+1);
if(se.find(ans[x+1]+a)==se.end()&&se.find(ans[x+1]-a)!=se.end()){
ans[x]=ans[x+1]-a;
se.erase(ans[x]);
continue;
}
if(se.find(ans[x+1]+a)!=se.end()&&se.find(ans[x+1]-a)==se.end()){
ans[x]=ans[x+1]+a;
se.erase(ans[x]);
continue;
}
int b=query(x,x+2);
int diff=abs(ans[x+1]-ans[x+2]);
if(b==diff&&a<b){
//mid
if(ans[x+1]>ans[x+2]){
ans[x]=ans[x+1]-a;
}
else{
ans[x]=ans[x+1]+a;
}
}
else if(a==b){
if(ans[x+1]>ans[x+2]){
ans[x]=ans[x+1]-a;
}
else{
ans[x]=ans[x+1]+a;
}
}
else if(a>b){
if(ans[x+1]>ans[x+2]){
ans[x]=ans[x+1]-a;
}
else{
ans[x]=ans[x+1]+a;
}
}
else{
if(ans[x+2]>ans[x+1]){
ans[x]=ans[x+1]-a;
}
else{
ans[x]=ans[x+1]+a;
}
}
se.erase(ans[x]);
}
for(int x=one+2;x<=ed;x++){
int a=query(x-1,x);
if(se.find(ans[x-1]+a)==se.end()&&se.find(ans[x-1]-a)!=se.end()){
ans[x]=ans[x-1]-a;
se.erase(ans[x]);
continue;
}
if(se.find(ans[x-1]+a)!=se.end()&&se.find(ans[x-1]-a)==se.end()){
ans[x]=ans[x-1]+a;
se.erase(ans[x]);
continue;
}
int b=query(x-2,x);
int diff=abs(ans[x-1]-ans[x-2]);
if(b==diff&&a<b){
//mid
if(ans[x-1]>ans[x-2]){
ans[x]=ans[x-1]-a;
}
else{
ans[x]=ans[x-1]+a;
}
}
else if(a==b){
if(ans[x-1]>ans[x-2]){
ans[x]=ans[x-1]-a;
}
else{
ans[x]=ans[x-1]+a;
}
}
else if(a>b){
if(ans[x-1]>ans[x-2]){
ans[x]=ans[x-1]-a;
}
else{
ans[x]=ans[x-1]+a;
}
}
else{
if(ans[x-2]>ans[x-1]){
ans[x]=ans[x-1]-a;
}
else{
ans[x]=ans[x-1]+a;
}
}
se.erase(ans[x]);
}
for(int x=1;x<=n;x++){
if(ans[x]==-1) ans[x]=*se.begin();
answer(x,ans[x]);
}
}
//code
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
1 ms |
436 KB |
Output is correct |
5 |
Correct |
1 ms |
436 KB |
Output is correct |
6 |
Correct |
1 ms |
432 KB |
Output is correct |
7 |
Correct |
1 ms |
432 KB |
Output is correct |
8 |
Correct |
1 ms |
436 KB |
Output is correct |
9 |
Correct |
1 ms |
436 KB |
Output is correct |
10 |
Correct |
1 ms |
440 KB |
Output is correct |
11 |
Correct |
1 ms |
436 KB |
Output is correct |
12 |
Correct |
1 ms |
436 KB |
Output is correct |
13 |
Correct |
1 ms |
436 KB |
Output is correct |
14 |
Correct |
1 ms |
432 KB |
Output is correct |
15 |
Correct |
1 ms |
684 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
1 ms |
436 KB |
Output is correct |
5 |
Correct |
1 ms |
436 KB |
Output is correct |
6 |
Correct |
1 ms |
432 KB |
Output is correct |
7 |
Correct |
1 ms |
432 KB |
Output is correct |
8 |
Correct |
1 ms |
436 KB |
Output is correct |
9 |
Correct |
1 ms |
436 KB |
Output is correct |
10 |
Correct |
1 ms |
440 KB |
Output is correct |
11 |
Correct |
1 ms |
436 KB |
Output is correct |
12 |
Correct |
1 ms |
436 KB |
Output is correct |
13 |
Correct |
1 ms |
436 KB |
Output is correct |
14 |
Correct |
1 ms |
432 KB |
Output is correct |
15 |
Correct |
1 ms |
684 KB |
Output is correct |
16 |
Correct |
2 ms |
436 KB |
Output is correct |
17 |
Correct |
4 ms |
692 KB |
Output is correct |
18 |
Correct |
5 ms |
436 KB |
Output is correct |
19 |
Correct |
7 ms |
692 KB |
Output is correct |
20 |
Correct |
7 ms |
692 KB |
Output is correct |
21 |
Correct |
5 ms |
488 KB |
Output is correct |
22 |
Correct |
6 ms |
692 KB |
Output is correct |
23 |
Correct |
5 ms |
488 KB |
Output is correct |
24 |
Correct |
4 ms |
436 KB |
Output is correct |
25 |
Correct |
5 ms |
484 KB |
Output is correct |
26 |
Correct |
7 ms |
692 KB |
Output is correct |
27 |
Correct |
6 ms |
436 KB |
Output is correct |
28 |
Correct |
6 ms |
484 KB |
Output is correct |
29 |
Correct |
7 ms |
696 KB |
Output is correct |
30 |
Correct |
5 ms |
692 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
1 ms |
436 KB |
Output is correct |
5 |
Correct |
1 ms |
436 KB |
Output is correct |
6 |
Correct |
1 ms |
432 KB |
Output is correct |
7 |
Correct |
1 ms |
432 KB |
Output is correct |
8 |
Correct |
1 ms |
436 KB |
Output is correct |
9 |
Correct |
1 ms |
436 KB |
Output is correct |
10 |
Correct |
1 ms |
440 KB |
Output is correct |
11 |
Correct |
1 ms |
436 KB |
Output is correct |
12 |
Correct |
1 ms |
436 KB |
Output is correct |
13 |
Correct |
1 ms |
436 KB |
Output is correct |
14 |
Correct |
1 ms |
432 KB |
Output is correct |
15 |
Correct |
1 ms |
684 KB |
Output is correct |
16 |
Correct |
2 ms |
436 KB |
Output is correct |
17 |
Correct |
4 ms |
692 KB |
Output is correct |
18 |
Correct |
5 ms |
436 KB |
Output is correct |
19 |
Correct |
7 ms |
692 KB |
Output is correct |
20 |
Correct |
7 ms |
692 KB |
Output is correct |
21 |
Correct |
5 ms |
488 KB |
Output is correct |
22 |
Correct |
6 ms |
692 KB |
Output is correct |
23 |
Correct |
5 ms |
488 KB |
Output is correct |
24 |
Correct |
4 ms |
436 KB |
Output is correct |
25 |
Correct |
5 ms |
484 KB |
Output is correct |
26 |
Correct |
7 ms |
692 KB |
Output is correct |
27 |
Correct |
6 ms |
436 KB |
Output is correct |
28 |
Correct |
6 ms |
484 KB |
Output is correct |
29 |
Correct |
7 ms |
696 KB |
Output is correct |
30 |
Correct |
5 ms |
692 KB |
Output is correct |
31 |
Correct |
16 ms |
600 KB |
Output is correct |
32 |
Correct |
18 ms |
568 KB |
Output is correct |
33 |
Correct |
27 ms |
632 KB |
Output is correct |
34 |
Correct |
41 ms |
664 KB |
Output is correct |
35 |
Correct |
45 ms |
436 KB |
Output is correct |
36 |
Correct |
28 ms |
684 KB |
Output is correct |
37 |
Correct |
25 ms |
660 KB |
Output is correct |
38 |
Correct |
22 ms |
676 KB |
Output is correct |
39 |
Correct |
38 ms |
660 KB |
Output is correct |
40 |
Correct |
38 ms |
664 KB |
Output is correct |
41 |
Correct |
36 ms |
664 KB |
Output is correct |
42 |
Correct |
29 ms |
664 KB |
Output is correct |
43 |
Correct |
25 ms |
672 KB |
Output is correct |
44 |
Correct |
27 ms |
680 KB |
Output is correct |
45 |
Correct |
34 ms |
912 KB |
Output is correct |
46 |
Correct |
35 ms |
688 KB |
Output is correct |
47 |
Correct |
38 ms |
668 KB |
Output is correct |
48 |
Correct |
41 ms |
660 KB |
Output is correct |
49 |
Correct |
41 ms |
664 KB |
Output is correct |
50 |
Correct |
38 ms |
664 KB |
Output is correct |
51 |
Correct |
32 ms |
684 KB |
Output is correct |
52 |
Correct |
39 ms |
664 KB |
Output is correct |
53 |
Correct |
37 ms |
688 KB |
Output is correct |
54 |
Correct |
33 ms |
668 KB |
Output is correct |
55 |
Correct |
37 ms |
684 KB |
Output is correct |
56 |
Correct |
36 ms |
664 KB |
Output is correct |
57 |
Correct |
35 ms |
668 KB |
Output is correct |
58 |
Correct |
35 ms |
664 KB |
Output is correct |
59 |
Correct |
39 ms |
664 KB |
Output is correct |
60 |
Correct |
36 ms |
928 KB |
Output is correct |