Submission #320803

#TimeUsernameProblemLanguageResultExecution timeMemory
320803mohamedsobhi777Xylophone (JOI18_xylophone)C++14
47 / 100
94 ms512 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; int n; int a1; int arr[10000 + 5]; int vis[10000 + 5]; int ok(int x) { if (x < 1 || x > n) return 0; return !vis[x]; } void conLhs() { if (a1 > 1) arr[a1 - 1] = query(a1 - 1, a1) + 1; for (int i = a1 - 2; i > 0; --i) { int q1 = query(i, i + 1); int q2 = abs(arr[i + 1] - arr[i + 2]); int q3 = query(i, i + 2); int sgn = ((q1 + q2 == q3 && arr[i + 1] > arr[i + 2]) || (arr[i + 1] < arr[i + 2] && q1 + q2 != q3) ? 1 : -1); arr[i] = arr[i + 1] + q1 * sgn; vis[arr[i]] = 1; } } void conMhs() { if (a1 + 1 <= n) arr[a1 + 1] = query(a1, a1 + 1) + 1; for (int i = a1 + 2; i <= n; ++i) { int q1 = query(i - 1, i); if (ok(arr[i - 1] + q1) + ok(arr[i - 1] - q1) == 1 && 0) { arr[i] = ok(arr[i - 1] + q1) ? arr[i - 1] + q1 : arr[i - 1] - q1; vis[arr[i]] = 1; continue; } int q2 = abs(arr[i - 1] - arr[i - 2]); int q3 = query(i - 2, i); int sgn = ((q1 + q2 == q3 && arr[i - 1] > arr[i - 2]) || (arr[i - 1] < arr[i - 2] && q1 + q2 != q3) ? 1 : -1); arr[i] = arr[i - 1] + q1 * sgn; vis[arr[i]] = 1; } } void solve(int N) { n = N; int l = 1, r = N; vis[1] = 1; while (l <= r) { int mid = (l + r) >> 1; if (query(mid, N) == N - 1) { a1 = mid; l = mid + 1; } else r = mid - 1; } arr[a1] = 1; conLhs(); conMhs(); for (int i = 1; i <= N; ++i) { answer(i, arr[i]); //printf("%d ", arr[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...