繁华模拟赛 Evensgn玩序列

时间:2023-03-08 20:39:36
繁华模拟赛 Evensgn玩序列

繁华模拟赛 Evensgn玩序列

繁华模拟赛 Evensgn玩序列

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int n,a[maxn],b[maxn],c[maxn],rka[maxn],rkb[maxn],rkc[maxn];
bool visa[maxn],visb[maxn],visc[maxn];
int rk,rec;
int main(){
freopen("perm.in","r",stdin);
freopen("perm.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
for(int i = n;i >= ;i--){
cin>>a[i];
visa[a[i]] = true;
}
for(int i = n;i >= ;i--){
cin>>b[i];
visb[b[i]] = true;
}
for(int i = n;i >= ;i--){
rk = -;
for(int j = ;j <= a[i];j++) if(visa[j]) rk++;
visa[a[i]] = false;
rka[i] = rk;
}
for(int i = n;i >= ;i--){
rk = -;
for(int j = ;j <= b[i];j++) if(visb[j])rk++;
visb[b[i]] = false;
rkb[i] = rk;
}
for(int i = ;i <= n;i++){
rkc[i] += rka[i] + rkb[i];
rkc[i+] += rkc[i] / i;
rkc[i] %= i;
}
memset(visc,true,sizeof(visc));
for(int i = n;i >= ;i--){
rec = rk = ;
while(){
if(visc[rec]) rk++;
if(rk > rkc[i]) break;
rec++;
}
visc[rec] = false;
cout<<rec<<" ";
}
return ;
}