Submission #156354

#TimeUsernameProblemLanguageResultExecution timeMemory
156354georgerapeanuXylophone (JOI18_xylophone)C++11
11 / 100
119 ms504 KiB
#include "xylophone.h" using namespace std; static int a[5005]; void get_val(int st,int dr,int st_val,int dr_val,int target_val,bool mode){ if(st == dr){ return ; } int l = st,r = dr; if(st_val != -1){ while(r - l > 1){ int mid = (l + r) / 2; if(query(st,mid) < target_val){ l = mid; } else{ r = mid; } } a[r] = st_val + (mode == false ? -1:1) * target_val; get_val(st + 1,r,-1,a[r],query(st + 1,r),!mode); get_val(r,dr,a[r],-1,query(r,dr),!mode); } else{ while(r - l > 1){ int mid = (l + r) / 2; if(query(mid,dr) < target_val){ r = mid; } else{ l = mid; } } a[l] = dr_val + (mode == false ? -1:1) * target_val; get_val(st,l,-1,a[l],query(st,l),!mode); get_val(l,dr - 1,a[l],-1,query(l,dr - 1),!mode); } } void solve(int n) { int l = 1,r = n; while(r - l > 1){ int mid = (l + r) / 2; if(query(1,mid) == n - 1){ r = mid; } else{ l = mid; } } int pos_n = r; a[pos_n] = n; get_val(1,pos_n,-1,n,query(1,pos_n),false); get_val(pos_n,n,n,-1,query(pos_n,n),false); for(int i = 1;i <= n;i++){ answer(i,a[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...