Submission #1156533

#TimeUsernameProblemLanguageResultExecution timeMemory
1156533zhasynXylophone (JOI18_xylophone)C++20
0 / 100
0 ms416 KiB
#include "xylophone.h" #include <bits/stdc++.h> #define pb push_back #define pf push_front using namespace std; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 3 *1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18; const ll mod = 1e9 + 7; ll um(ll a, ll b){ return (1LL * a * b) % mod; } ll subr(ll a, ll b){ return ((1LL * a - b) % mod + mod) % mod; } int cur[N]; void solve(int n) { int l = 1, r = n, rx; while(r - l > 1){ int mid = (r + l) / 2; if(query(1, mid) == n - 1) r = mid; else l = mid; } rx = r; cur[rx] = n; for(int i = rx + 1; i <= n; i++){ int rs = query(i - 1, i); int fr = cur[i - 1] - rs, sc = cur[i - 1] + rs; if(sc > n){ cur[i] = fr; continue; } if(fr < 1){ cur[i] = sc; continue; } int rs2 = query(i - 2, i); if(rs2 == abs(cur[i - 1] - cur[i - 2])){ if(cur[i - 2] > cur[i - 1]) cur[i] = sc; else cur[i] = fr; } else{ if(cur[i - 2] > cur[i - 1]) cur[i] = fr; else cur[i] = sc; } } for(int i = rx - 1; i >= 1; i--){ int rs = query(i, i + 1); int fr = cur[i + 1] - rs, sc = cur[i + 1] + rs; if(sc > n){ cur[i] = fr; continue; } if(fr < 1){ cur[i] = sc; continue; } int rs2 = query(i, i + 2); if(rs2 == abs(cur[i + 1] - cur[i + 2])){ if(cur[i + 2] > cur[i + 1]) cur[i] = sc; else cur[i] = fr; } else{ if(cur[i + 2] > cur[i + 1]) cur[i] = fr; else cur[i] = sc; } } for(int i = 1; i <= n; i++) { answer(i, cur[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...