This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define FOR(i, x, y) for (int i = x; i < y; i++)
typedef long long ll;
using namespace std;
int a[1000001], b[1000001];
pair<int, int> dp[1000001][2];
void upd(pair<int, int> &X, pair<int, int> &Y) {
X.first = min(X.first, Y.first);
X.second = max(X.second, Y.second);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
FOR(i, 1, 2 * n + 1) cin >> a[i];
FOR(i, 1, 2 * n + 1) cin >> b[i];
dp[0][0] = dp[0][1] = {0, 0};
FOR(i, 1, 2 * n + 1) {
dp[i][0] = dp[i][1] = {n + 1, -n - 1};
if (a[i] >= a[i - 1]) upd(dp[i][0], dp[i - 1][0]);
if (a[i] >= b[i - 1]) upd(dp[i][0], dp[i - 1][1]);
if (b[i] >= a[i - 1]) upd(dp[i][1], dp[i - 1][0]);
if (b[i] >= b[i - 1]) upd(dp[i][1], dp[i - 1][1]);
dp[i][1].first++, dp[i][1].second++;
}
string ans = "";
for (int i = 2 * n, curr = INT_MAX; i; i--) {
if (a[i] > curr || dp[i][0].first > n || dp[i][0].second < n) {
if (b[i] > curr || dp[i][1].first > n || dp[i][1].second < n) return cout << -1, 0;
ans += "B", curr = b[i], n--;
} else ans += "A", curr = a[i];
}
reverse(ans.begin(), ans.end());
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |