Submission #919654

#TimeUsernameProblemLanguageResultExecution timeMemory
919654OAleksaBuilding 4 (JOI20_building4)C++14
11 / 100
49 ms19036 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second const int N = 5e5 + 69; const int inf = 1e9; int n, a[N], b[N]; int mna1[N], mxa1[N], mna2[N], mxa2[N]; int mnb1[N], mxb1[N], mnb2[N], mxb2[N]; signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; //cin >> tt; while (tt--) { cin >> n; n *= 2; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) cin >> b[i]; for (int i = 1;i <= n;i++) { mna1[i] = mna2[i] = mnb1[i] = mnb2[i] = inf; mxa1[i] = mxa2[i] = mxb1[i] = mxb2[i] = -inf; } mna1[1] = mxa1[1] = mnb2[1] = mxb2[1] = 1; mna2[1] = mxa2[1] = mnb1[1] = mxb1[1] = 0; for (int i = 2;i <= n;i++) { if (a[i] >= a[i - 1]) { mxa1[i] = max(mxa1[i], mxa1[i - 1] + 1); mna1[i] = min(mna1[i], mna1[i - 1] + 1); mxb1[i] = max(mxb1[i], mxb1[i - 1]); mnb1[i] = min(mnb1[i], mnb1[i - 1]); } if (a[i] >= b[i - 1]) { mxa1[i] = max(mxa1[i], mxa2[i - 1] + 1); mna1[i] = min(mna1[i], mna2[i - 1] + 1); mxb1[i] = max(mxb1[i], mxb2[i - 1]); mnb1[i] = min(mnb1[i], mnb2[i - 1]); } if (b[i] >= a[i - 1]) { mxa2[i] = max(mxa2[i], mxa1[i - 1]); mna2[i] = min(mna2[i], mna1[i - 1]); mxb2[i] = max(mxb2[i], mxb1[i - 1] + 1); mnb2[i] = min(mnb2[i], mnb1[i - 1] + 1); } if (b[i] >= b[i - 1]) { mxa2[i] = max(mxa2[i], mxa2[i - 1]); mna2[i] = min(mna2[i], mna2[i - 1]); mxb2[i] = max(mxb2[i], mxb2[i - 1] + 1); mnb2[i] = min(mnb2[i], mnb2[i - 1] + 1); } } if (((mna1[n] > n / 2 || mxa1[n] < n / 2) && (mnb1[n] > n / 2 || mxb1[n] < n / 2)) && ((mna2[n] > n / 2 || mxa2[n] < n / 2) && (mnb2[n] > n / 2 || mxb2[n] < n / 2))) cout << "-1"; else { string ans; int x = n / 2, y = n / 2, lst = inf; for (int i = n;i >= 1;i--) { if (mna1[i] <= x && mxa1[i] >= x && a[i] <= lst) { ans += 'A'; x--; lst = a[i]; } else if (mnb2[i] <= y && mxb2[i] >= y && b[i] <= lst) { ans += 'B'; y--; lst = b[i]; } } reverse(ans.begin(), ans.end()); cout << ans; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...