Submission #1159889

#TimeUsernameProblemLanguageResultExecution timeMemory
1159889Der_VlaposXylophone (JOI18_xylophone)C++20
47 / 100
24 ms432 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define f first #define s second #define ll long long #define pb push_back #define all(v) v.begin(), v.end() int req(int l, int r) { return query(l + 1, r + 1); } void solve(int n) { int L = 0, R = n - 1; while (R - L > 1) { int M = (L + R) >> 1; if (req(0, M) == n - 1) R = M; else L = M; } vector<int> a(n); int p = R; a[p] = n; { if (p + 1 < n) a[p + 1] = n - req(p, p + 1); for (int i = p + 2; i < n; ++i) { int v1 = req(i - 2, i); int v2 = req(i - 1, i); int mx = max(a[i - 2], a[i - 1]); int mn = min(a[i - 2], a[i - 1]); int d = mx - mn; if (d == v1) { if (a[i - 1] == mn) a[i] = a[i - 1] + v2; else a[i] = a[i - 1] - v2; } else { if (v1 == v2) { if (a[i - 1] == mn) a[i] = a[i - 1] + v2; else a[i] = a[i - 1] - v2; } else { if (a[i - 1] == mn) a[i] = a[i - 1] - v2; else a[i] = a[i - 1] + v2; } } } } { if (p) a[p - 1] = n - req(p - 1, p); for (int i = p - 2; i >= 0; --i) { int v1 = req(i, i + 2); int v2 = req(i, i + 1); int mx = max(a[i + 2], a[i + 1]); int mn = min(a[i + 2], a[i + 1]); int d = mx - mn; // cerr << mx << " " << mn << "WTF\n"; if (d == v1) { if (a[i + 1] == mn) a[i] = a[i + 1] + v2; else a[i] = a[i + 1] - v2; } else { if (v1 == v2) { if (a[i + 1] == mn) a[i] = a[i + 1] + v2; else a[i] = a[i + 1] - v2; } else { if (a[i + 1] == mn) a[i] = a[i + 1] - v2; else a[i] = a[i + 1] + v2; } } // cerr << i << " " << a[i] << " " << v1 << " " << v2 << " " << d << "WAT\n"; } } for (int i = 1; i <= n; i++) { // cerr << i << " " << a[i - 1] << "!\n"; answer(i, a[i - 1]); } } // #include <cstdio> // #include <cstdlib> // #include "xylophone.h" // static const int N_MAX = 5000; // static const int Q_MAX = 10000; // static int N; // static int A[N_MAX]; // static bool used[N_MAX]; // static int query_c; // static int answer_c; // int query(int s, int t) // { // if (query_c >= Q_MAX) // { // printf("Wrong Answer\n"); // exit(0); // } // query_c++; // if (!(1 <= s && s <= t && t <= N)) // { // printf("Wrong Answer\n"); // exit(0); // } // int mx = 0, mn = N + 1; // for (int i = s - 1; i < t; i++) // { // if (mx < A[i]) // { // mx = A[i]; // } // if (mn > A[i]) // { // mn = A[i]; // } // } // return mx - mn; // } // void answer(int i, int a) // { // answer_c++; // if (!(1 <= i && i <= N)) // { // printf("Wrong Answer\n"); // exit(0); // } // if (!(1 <= a && a <= N)) // { // printf("Wrong Answer\n"); // exit(0); // } // if (used[i - 1]) // { // printf("Wrong Answer\n"); // exit(0); // } // if (a != A[i - 1]) // { // printf("Wrong Answer\n"); // exit(0); // } // used[i - 1] = true; // } // int main() // { // query_c = 0; // answer_c = 0; // if (scanf("%d", &N) != 1) // { // fprintf(stderr, "Error while reading input\n"); // exit(1); // } // for (int i = 0; i < N; i++) // { // if (scanf("%d", A + i) != 1) // { // fprintf(stderr, "Error while reading input\n"); // exit(1); // } // used[i] = false; // } // solve(N); // if (!(answer_c == N)) // { // printf("Wrong Answer\n"); // exit(0); // } // printf("Accepted : %d\n", query_c); // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...