Submission #722035

#TimeUsernameProblemLanguageResultExecution timeMemory
722035FatihSolakXylophone (JOI18_xylophone)C++17
100 / 100
73 ms436 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; int A[5005]; bool vis[5005]; void solve(int N) { int l = 1,r = N; while(l < r){ int m = (l + r)/2; if(query(1,m) != N-1){ l = m+1; } else r = m; } A[l] = N; vis[N] = 1; answer(l,N); for(int i = l-1; i>=1; i--){ int dif = query(i,i+1); if(A[i+1] + dif > N || vis[A[i+1] + dif]){ A[i] = A[i+1] - dif; vis[A[i]] = 1; answer(i,A[i]); continue; } if(A[i+1] - dif < 1 || vis[A[i+1] - dif]){ A[i] = A[i+1] + dif; vis[A[i]] = 1; answer(i,A[i]); continue; } for(int j = i + 1;j<=l;j++){ if(A[j] > A[i+1] + dif){ int val = query(i,j); if(val == A[j] - (A[i+1] - dif)){ A[i] = (A[i+1] - dif); } else A[i] = (A[i+1] + dif); break; } if(A[j] < A[i+1] - dif){ int val = query(i,j); if(val == (A[i+1] + dif) - A[j]){ A[i] = (A[i+1] + dif); } else A[i] = (A[i+1] - dif); break; } } vis[A[i]] = 1; answer(i,A[i]); } for(int i = l+1; i<=N; i++){ int dif = query(i-1,i); if(A[i-1] + dif > N || vis[A[i-1] + dif]){ A[i] = A[i-1] - dif; vis[A[i]] = 1; answer(i,A[i]); continue; } if(A[i-1] - dif < 1 || vis[A[i-1] - dif]){ A[i] = A[i-1] + dif; vis[A[i]] = 1; answer(i,A[i]); continue; } for(int j = i -1;j>=l;j--){ if(A[j] > A[i-1] + dif){ int val = query(j,i); if(val == A[j] - (A[i-1] - dif)){ A[i] = (A[i-1] - dif); } else A[i] = (A[i-1] + dif); break; } if(A[j] < A[i-1] - dif){ int val = query(j,i); if(val == (A[i-1] + dif) - A[j]){ A[i] = (A[i-1] + dif); } else A[i] = (A[i-1] - dif); break; } } vis[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...