Submission #786980

#TimeUsernameProblemLanguageResultExecution timeMemory
786980winter0101Xylophone (JOI18_xylophone)C++14
100 / 100
56 ms472 KiB
#include<bits/stdc++.h> #include <xylophone.h> #define fastio ios_base::sync_with_stdio(false);cin.tie(nullptr); using namespace std; int a[10009]; int pos[10009]; void solve(int n){ for (int i=1;i<=2*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); if (pos1<n){ a[pos1+1]=query(pos1,pos1+1)+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||pos[a[i-1]+d]){ a[i]=a[i-1]-d; pos[a[i]]=1; answer(i,a[i]); continue; } if (a[i-1]-d<=0||pos[a[i-1]-d]){ a[i]=a[i-1]+d; pos[a[i]]=1; answer(i,a[i]); continue; } int r=query(i-2,i); if (a[i-2]<a[i-1]){ if (a[i-1]+d==a[i-2]+r)a[i]=a[i-1]+d; else a[i]=a[i-1]-d; pos[a[i]]=1; answer(i,a[i]); } else { if (a[i-1]-d==a[i-2]-r)a[i]=a[i-1]-d; else a[i]=a[i-1]+d; pos[a[i]]=1; answer(i,a[i]); } } } 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>=1;i--){ int d=query(i,i+1); if (a[i+1]+d>n||pos[a[i+1]+d]){ a[i]=a[i+1]-d; pos[a[i]]=1; answer(i,a[i]); continue; } if (a[i+1]-d<=0||pos[a[i+1]-d]){ a[i]=a[i+1]+d; pos[a[i]]=1; answer(i,a[i]); continue; } int r=query(i,i+2); if (a[i+2]<a[i+1]){ if (a[i+1]+d==a[i+2]+r)a[i]=a[i+1]+d; else a[i]=a[i+1]-d; pos[a[i]]=1; answer(i,a[i]); } else { if (a[i+1]-d==a[i+2]-r)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...