# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
211501 | Pajaraja | Building 4 (JOI20_building4) | C++17 | 425 ms | 27780 KiB |
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 MAXN 500007
using namespace std;
int mn[2][2*MAXN],mx[2][2*MAXN],a[2][2*MAXN];
bool mz[2][2*MAXN];
char rc[2*MAXN];
void reconstruct(int k,int ind,int val)
{
rc[ind]='A'+k;
if(!ind) return;
for(int t=0;t<2;t++) if(a[t][ind-1]<=a[k][ind] && mn[t][ind-1]<=val-k && mx[t][ind-1]>=val-k) {reconstruct(t,ind-1,val-k); return;}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<2*n;i++) scanf("%d",&a[0][i]);
for(int i=0;i<2*n;i++) scanf("%d",&a[1][i]);
mz[0][0]=mz[1][0]=true;
mn[0][0]=mx[0][0]=0;
mn[1][0]=mx[1][0]=1;
for(int i=1;i<2*n;i++) mn[0][i]=mn[1][i]=2*n+12;
for(int i=1;i<2*n;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) if(a[k][i-1]<=a[j][i] && mz[k][i-1])
{
mz[j][i]=true;
mn[j][i]=min(mn[j][i],mn[k][i-1]+j);
mx[j][i]=max(mx[j][i],mx[k][i-1]+j);
}
for(int t=0;t<2;t++) if(mn[t][2*n-1]<=n && mx[t][2*n-1]>=n && mz[t][2*n-1])
{
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |