#include <iostream>
#include <algorithm>
#include <string.h>
#include <map>
using namespace std;
const int Len=200107;
int c[Len],p1[Len],p2[Len],p3[Len];
int n;
int lowbit(int n){
return n&(-n);
}
void modify(int y,int x){
while(y<=n+10){
c[y]+=x;
y+=lowbit(y);
}
}
int sum(int y){
int sum=0;
while(y>0){
sum+=c[y];
y-=lowbit(y);
}
return sum;
}
int main(){
int i,j,x;
while(cin>>n){
memset(c,0,sizeof(c));
for(i=1;i<=n;i++){modify(i,1);}
for(i=1;i<=n;i++){
cin>>x;
x++;
p1[i]=sum(x-1);
modify(x,-1);
}
memset(c,0,sizeof(c));
for(i=1;i<=n;i++){modify(i,1);}
for(i=0;i<=n;i++){
cin>>x;
x++;
p2[i]=sum(x-1);
modify(x,-1);
}
memset(p3,0,sizeof(p3));
for(i=n;i>0;i--){
p3[i]+=p1[i]+p2[i];
if(p3[i]>=(n-i+1)){
p3[i]=p3[i]-(n-i+1);
if(i!=1)p3[i-1]++;
}
}
memset(c,0,sizeof(c));
for(i=1;i<=n;i++){modify(i,1);}
for(i=1;i<=n;i++){
int low=1,high=n;
while(low<=high){
int mid=(low+high)/2;
int summ=sum(mid-1);
int summm=sum(mid);
if(summ>p3[i]){
high=mid-1;
}else if(summ==p3[i]&&summm-summ==1)
high=mid-1;
else if(summ==p3[i]&&summm-summ<1)
low=mid+1;
else if(summ<p3[i])
low=mid+1;
}
modify(low,-1);
cout<<low-1<<" ";
}
cout<<endl;
}
}
codeforces Misha and Permutations Summation
最新推荐文章于 2019-11-09 15:07:53 发布