Submission #1254262

#TimeUsernameProblemLanguageResultExecution timeMemory
1254262MercubytheFirstXylophone (JOI18_xylophone)C++20
0 / 100
0 ms408 KiB
#include "xylophone.h" #ifdef LOCAL #include "../../../bits/stdc++.h" #else #include <bits/stdc++.h> #endif using namespace std; void solve(int N) { const int n = N; if(N == 1) { answer(1, 1); return; } if(N == 2) { answer(1, 1); answer(2, 2); return; } using i2 = pair<int, int>; vector<int> a(n+1), pdif(n+1); set<i2> s; pdif[2] = query(1, 2); a[1] = 0; a[2] = pdif[2]; for(int i = 3; i <= n; ++i) { const int q1 = pdif[i-1]; const int q2 = pdif[i] = query(i-1, i); const int q3 = query(i-2, i); // cerr << i << " : " << q1 << ' ' << q2 << ' ' << q3 << " | " << pdif[i] << '\n'; if(a[i-2] < a[i-1]) { if(q1 + q2 == q3) { // i-1 median, a[i] = a[i-1]+q2 a[i] = a[i-1]+q2; } else if(q1 == q3) { // i median, a[i] = a[i-1]-q2 a[i] = a[i-1]-q2; } else if(q2 == q3) { // i-2 median, a[i] = a[i-1]-q2 a[i] = a[i-1]-q2; } else { assert(false); } } else { if(q1 + q2 == q3) { // i-1 median, a[i] = a[i-1]-q2 a[i] = a[i-1]-q2; } else if(q1 == q3) { // i median, a[i] = a[i-1]+q2 a[i] = a[i-1]+q2; } else if(q2 == q3){ a[i] = a[i-1]+q2; } else { assert(false); } } s.insert({a[i], i}); } int add = -begin(s)->first + 1; int pos1 = -1, posn = -1; for(int i = 1; i <= n; ++i) { a[i] += add; // cerr << a[i] << " \n"[i == n]; if(a[i] == 1) { pos1 = i; } if(a[i] == n) { posn = i; } } if(pos1 > posn) { for(int i = 1; i <= n; ++i) { a[i] = n - a[i] + 1; } } 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...