Submission #1217381

#TimeUsernameProblemLanguageResultExecution timeMemory
1217381stdfloatXylophone (JOI18_xylophone)C++20
47 / 100
24 ms428 KiB
#include <bits/stdc++.h> #include "xylophone.h" // #include "grader.cpp" using namespace std; void solve(int n) { int l = 1, r = n; while (l <= r) { int md = (l + r) >> 1; if (query(1, md) != n - 1) l = md + 1; else r = md - 1; } int R = l; vector<int> A(n + 1); A[R] = n; if (R != n) { A[R + 1] = A[R] - query(R, R + 1); for (int i = R + 2; i <= n; i++) { int a = A[i - 2], b = A[i - 1]; //c = A[i] int x = query(i - 2, i), y = query(i - 1, i); if (a < b) { if (x == y) A[i] = b - x; //c < a < b else if (x == b - a) A[i] = b - y; //a < c < b else if (x > y) A[i] = a + x; //a < b < c else assert(false); } else { if (x == y) A[i] = b + x; //c > a > b else if (x == a - b) A[i] = b + y; //a > c > b else if (x > y) A[i] = a - x; //a > b > c else assert(false); } } } if (1 != R) { A[R - 1] = A[R] - query(R - 1, R); for (int i = R - 2; i > 0; i--) { int a = A[i + 2], b = A[i + 1]; //c = A[i] int x = query(i, i + 2), y = query(i, i + 1); if (a < b) { if (x == y) A[i] = b - x; //b > a > c else if (x == b - a) A[i] = b - y; //b > c > a else if (x > y) A[i] = a + x; //c > b > a else assert(false); } else { if (x == y) A[i] = b + x; //b < a < c else if (x == a - b) A[i] = b + y; //b < c < d else if (x > y) A[i] = a - x; //a < b < c else assert(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...