Submission #547707

#TimeUsernameProblemLanguageResultExecution timeMemory
547707krit3379Building 4 (JOI20_building4)C++17
100 / 100
875 ms53204 KiB
#include<bits/stdc++.h>
using namespace std;
#define N 1000005

int a[N],b[N],ar[2][N];
pair<int,int> dp[2][N];

int main(){
    int n,i,mi,ma,pos,now;
    string ans;
    cin>>n;
    for(i=1;i<=n<<1;i++)cin>>a[i],dp[0][i]=dp[1][i]={1e9,-1e9};
    for(i=1;i<=n<<1;i++)cin>>b[i];
    for(i=1;i<=n<<1;i++)ar[0][i]=a[i],ar[1][i]=b[i];
    dp[0][1]={1,1};
    dp[1][1]={0,0};
    for(i=2;i<=n<<1;i++){
        mi=1e9,ma=-1e9;
        if(a[i-1]<=a[i])mi=min(mi,dp[0][i-1].first);
        if(b[i-1]<=a[i])mi=min(mi,dp[1][i-1].first);
        dp[0][i].first=mi+1;
        if(a[i-1]<=a[i])ma=max(ma,dp[0][i-1].second);
        if(b[i-1]<=a[i])ma=max(ma,dp[1][i-1].second);
        dp[0][i].second=ma+1;
        mi=1e9,ma=-1e9;
        if(a[i-1]<=b[i])mi=min(mi,dp[0][i-1].first);
        if(b[i-1]<=b[i])mi=min(mi,dp[1][i-1].first);
        dp[1][i].first=mi;
        if(a[i-1]<=b[i])ma=max(ma,dp[0][i-1].second);
        if(b[i-1]<=b[i])ma=max(ma,dp[1][i-1].second);
        dp[1][i].second=ma;
    }
    pos=-1;
    if(dp[0][n<<1].first<=n&&n<=dp[0][n<<1].second)pos=0;
    else if(dp[1][n<<1].first<=n&&n<=dp[1][n<<1].second)pos=1;
    else{
        cout<<-1;
        return 0;
    }
    now=n;
    for(i=n<<1;i>0;i--){
        ans+='A'+pos;
        now-=(!pos);
        if(ar[pos][i]>=ar[0][i-1]&&dp[0][i-1].first<=now&&now<=dp[0][i-1].second)pos=0;
        else pos=1;
    }
    reverse(ans.begin(),ans.end());
    cout<<ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...