Submission #590507

#TimeUsernameProblemLanguageResultExecution timeMemory
590507karriganXylophone (JOI18_xylophone)C++14
0 / 100
1 ms208 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++){ cin>>a[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; a[pos1+1]=query(pos1,pos1+1)+1; pos[a[pos1+1]]=1; if (pos1>1){ a[pos1-1]=query(pos1-1,pos1)+1; pos[a[pos1-1]]=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; } 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; } for (int i=1;i<=n;i++){ answer(i,a[i]); } } /*int main() { fastio //freopen(".INP","r",stdin); //freopen(".OUT","w",stdout); }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...