제출 #590510

#제출 시각아이디문제언어결과실행 시간메모리
590510karriganXylophone (JOI18_xylophone)C++14
0 / 100
2 ms308 KiB
#include<bits/stdc++.h> #include <xylophone.h> #define fastio ios_base::sync_with_stdio(false);cin.tie(nullptr); using namespace std; int a[5009]; int pos[5009]; void solve(int n){ for (int i=1;i<=n;i++){ pos[i]=0; } int l=1,r=n; int pos1=1; while (l<=r){ int mid=(l+r)/2; int dd=query(mid,n); if (dd==n-1){ l=mid+1; pos1=mid; } else { r=mid-1; } } a[pos1]=1; pos[1]=1; answer(pos1,1); a[pos1+1]=query(pos1,pos1+1)+1; pos[a[pos1+1]]=1; answer(pos1+1,a[pos1+1]); if (pos1>1){ a[pos1-1]=query(pos1-1,pos1)+1; pos[a[pos1-1]]=1; answer(pos1-1,a[pos1-1]); } for (int i=pos1+2;i<=n;i++){ int d=query(i-1,i); if (a[i-1]+d>n){ a[i]=a[i-1]-d; } else if (a[i-1]-d<0){ a[i]=a[i-1]+d; } if (a[i-1]+d<=n&&a[i-1]-d>0){ if (pos[a[i-1]+d]==1){ a[i]=a[i-1]-d; } else if (pos[a[i-1]-d]==1){ a[i]=a[i-1]+d; } else if (pos[a[i-1]-d]==0&&pos[a[i-1]+d]==0){ int rr=query(i-2,i); int l1=a[i-1]-d; if (max({l1,a[i-1],a[i-2]})-min({l1,a[i-1],a[i-2]})==rr){ a[i]=a[i-1]-d; } else { a[i]=a[i-1]+d; } } } pos[a[i]]=1; answer(i,a[i]); } for (int i=pos1-2;i>=1;i--){ int d=query(i,i+1); if (a[i+1]+d>n){ a[i]=a[i+1]-d; } else if (a[i+1]-d<0){ a[i]=a[i+1]+d; } if (a[i+1]+d<=n&&a[i+1]-d>0){ if (pos[a[i+1]+d]==1){ a[i]=a[i+1]-d; } else if (pos[a[i+1]-d]==1){ a[i]=a[i+1]+d; } else if (pos[a[i+1]-d]==0&&pos[a[i+1]+d]==0){ int rr=query(i+2,i); int l1=a[i+1]-d; if (max({l1,a[i+1],a[i+2]})-min({l1,a[i+1],a[i+2]})==rr){ a[i]=a[i+1]-d; } else { a[i]=a[i+1]+d; } } } pos[a[i]]=1; answer(i,a[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...