Submission #135036

#TimeUsernameProblemLanguageResultExecution timeMemory
135036osaaateiasavtnlXylophone (JOI18_xylophone)C++14
100 / 100
284 ms644 KiB
#include<bits/stdc++.h> using namespace std; #ifdef HOME #else #include "xylophone.h" #endif const int N = 5001; #ifdef HOME const int INF = 1e9 + 7; int n; int a[N]; int query(int l, int r) { int mn = INF, mx = -INF; for (int i = l; i <= r; ++i) { mn = min(mn, a[i]); mx = max(mx, a[i]); } return mx - mn; } void answer(int i, int x) { } #endif int ans[N]; int mem[2][N]; bool t[N], r[N]; int cnt[N]; bool check(int n) { for (int i = 1; i <= n; ++i) { if (ans[i] < 1 || ans[i] > n) return 0; } for (int i = 1; i <= n; ++i) { cnt[i] = 0; } for (int i = 1; i <= n; ++i) { ++cnt[ans[i]]; } for (int i = 1; i <= n; ++i) { if (cnt[i] != 1) { return 0; } } int p1, pn; for (int i = 1; i <= n; ++i) { if (ans[i] == 1) p1 = i; if (ans[i] == n) pn = i; } if (pn < p1) return 0; return 1; } void solve(int n) { for (int i = 1; i + 1 <= n; ++i) { mem[0][i] = query(i, i + 1); } for (int i = 1; i + 2 <= n; ++i) { mem[1][i] = query(i, i + 2); } for (int i = 1; i + 2 <= n; ++i) { t[i + 2] = (mem[0][i] + mem[0][i + 1]) != mem[1][i]; } for (int i = 1; i <= n; ++i) { r[i] = r[i - 1] ^ t[i]; } #ifdef HOME for (int i = 1; i <= n; ++i) { cout << r[i] << ' '; } cout << '\n'; #endif for (int f = 1; f <= n; ++f) { ans[1] = f; for (int i = 2; i <= n; ++i) { if (r[i]) { ans[i] = ans[i - 1] + mem[0][i - 1]; } else { ans[i] = ans[i - 1] - mem[0][i - 1]; } } if (check(n)) { for (int i = 1; i <= n; ++i) { answer(i, ans[i]); } return; } ans[1] = f; for (int i = 2; i <= n; ++i) { if (r[i]) { ans[i] = ans[i - 1] - mem[0][i - 1]; } else { ans[i] = ans[i - 1] + mem[0][i - 1]; } } if (check(n)) { for (int i = 1; i <= n; ++i) { answer(i, ans[i]); } return; } } } #ifdef HOME signed main() { cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; } solve(n); for (int i = 1; i <= n; ++i) { cout << ans[i] << ' '; } cout << '\n'; } #endif

Compilation message (stderr)

xylophone.cpp: In function 'bool check(int)':
xylophone.cpp:51:5: warning: 'pn' may be used uninitialized in this function [-Wmaybe-uninitialized]
     if (pn < p1) return 0;
     ^~
xylophone.cpp:51:5: warning: 'p1' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...