Submission #1156720

#TimeUsernameProblemLanguageResultExecution timeMemory
1156720zhasynXylophone (JOI18_xylophone)C++20
100 / 100
18 ms444 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; } static int A[5000]; int cur[N], dif[N]; bool was[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; was[n] = true; 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 || was[sc]){ cur[i] = fr; was[fr] = true; continue; } if(fr < 1 || was[fr]){ cur[i] = sc; was[sc] = true; 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(rs2 == rs){ 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; } } was[cur[i]] = true; } 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 || was[sc]){ cur[i] = fr; was[fr] = true; continue; } if(fr < 1 || was[fr]){ cur[i] = sc; was[sc] = true; 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(rs2 == rs){ 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; } } was[cur[i]] = true; } 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...