Submission #239635

#TimeUsernameProblemLanguageResultExecution timeMemory
239635Dremix10Xylophone (JOI18_xylophone)C++17
47 / 100
141 ms98168 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; #define F first #define S second #define endl '\n' #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define maxp 22 #define EPS (ld)(1e-18) #define mod (int)(1e9+7) int asked[5001][5001]; int ask(int l, int r){ if(asked[l][r]!=-1) return asked[l][r]; asked[l][r]=query(l,r); return asked[l][r]; } void solve(int N) { int arr[N+1]; int i,j; for(i=0;i<=N;i++) for(j=0;j<=N;j++) asked[i][j]=-1; int l=1,r=N; while(l<r){ int mid=(l+r)/2; int x=ask(1,mid); if(x==N-1) r=mid-1; else l=mid+1; } int found; int x=ask(1,l); if(x==N-1) found=l; else found=l+1; //cout<<found<<endl; arr[found]=N; if(found>1){ int x=ask(found-1,found); arr[found-1]=N-x; } if(found<N){ int x=ask(found,found+1); arr[found+1]=N-x; } for(i=found-2;i>=1;i--){ int x2=ask(i,i+1); int x3=ask(i,i+2); int p1=arr[i+1]-x2; int p2=arr[i+1]+x2; if(max({p1,arr[i+1],arr[i+2]})-min({p1,arr[i+1],arr[i+2]})==x3) arr[i]=p1; else arr[i]=p2; } for(i=found+2;i<=N;i++){ int x2=ask(i-1,i); int x3=ask(i-2,i); int p1=arr[i-1]-x2; int p2=arr[i-1]+x2; if(max({p1,arr[i-1],arr[i-2]})-min({p1,arr[i-1],arr[i-2]})==x3) arr[i]=p1; else arr[i]=p2; } for(i=1;i<=N;i++) answer(i,arr[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...