Submission #1164666

#TimeUsernameProblemLanguageResultExecution timeMemory
1164666ReLiceXylophone (JOI18_xylophone)C++20
0 / 100
0 ms416 KiB
#include "xylophone.h" #include <bits/stdc++.h> #define ll int #define ld double #define pb push_back #define pf push_front #define ins insert #define fr first #define sc second #define endl "\n" #define ar array #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() using namespace std; void solve(ll n) { ll i; ll l = 1, r = n; ll ans[n + 1]; while(l + 1 < r){ ll m = (l + r) / 2; ll a = query(1, m); if(a == n - 1) r = m; else l = m; } map<ll,ll> mp; ans[r] = n; mp[n] ++; if(r < n) { ans[r + 1] = n - query(r, r + 1); mp[ans[r + 1]] ++; } ans[r - 1] = n - query(r - 1, r); mp[ans[r - 1]] ++; for(i=r-2;i>0;i--){ mp[ans[i + 1]]++; ll d = query(i, i + 1); if(mp[ans[i + 1] - d] || ans[i + 1] - d < 1){ ans[i] = ans[i + 1] + d; continue; } if(mp[ans[i + 1] + d] || ans[i + 1] + d > n){ ans[i] = ans[i + 1] - d; continue; } ll a = ans[i + 1] - d; ll b = ans[i + 1] + d; ll d2 = query(i, i + 2); if(abs(a - ans[i + 1]) == d && abs(a - ans[i + 2]) == d2) ans[i] = a; else ans[i] = b; } for(i=r+2;i<=n;i++){ mp[ans[i - 1]]++; ll d = query(i - 1, i); if(mp[ans[i - 1] - d] || ans[i - 1] - d < 1){ ans[i] = ans[i - 1] + d; continue; } if(mp[ans[i - 1] + d] || ans[i - 1] + d > n){ ans[i] = ans[i - 1] - d; continue; } ll a = ans[i - 1] - d; ll b = ans[i - 1] + d; ll d2 = query(i - 2, i); if(abs(a - ans[i - 1]) == d && abs(a - ans[i - 2]) == d2) ans[i] = a; else ans[i] = b; } for(i=1;i<=n;i++){ answer(i, ans[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...