Inversion II
P的时候 可以暴力(数据小)
I 的时候真的没想到有这个办法, 受到到这个启发
https://blog.youkuaiyun.com/zzukun/article/details/7815969
I 2 3 6 4 0 2 2 1 0
1 2 3 4 5 6 7 8 9
1,前面有两个比他大的,留两个位子。 2 前面有三个比它大的,留三个位子。同理,
0 0 1 0 0 0 。。。
0 0 1 0 2 (第三个位子有1了,所以 继续往后数)。以为从小到大遍历所以 往后数的话不用考虑已经安排上坐位的 数字。
#include<bits/stdc++.h>
using namespace std;
int pp[55];
int pc[55];
int ii[55];
int ic[55];
int main()
{
int n;
while(cin>>n && n!=0)
{
memset(pc,0,sizeof pc);
memset(ic,0,sizeof ic);
char a;
cin>>a;
if(a=='P')
{
for(int i=0;i<n;i++)
cin>>pp[i];
for(int i=1;i<n;i++)
for(int j=0;j<i;j++)
if(pp[i]<pp[j])
pc[pp[i]]++;
for(int i=1;i<n+1;i++)
cout<<pc[i]<<" ";
cout<<'\n';
}
else
{
for(int i=1;i<=n;i++)
cin>>ii[i];
for(int i=1;i<=n;i++)
{
int cou=-1;
for(int j=1;j<=n;j++)
{
if(ic[j]==0)
{
cou++;
if(cou==ii[i] )
{
ic[j]=i;
}
}
}
}
for(int i=1;i<=n;i++)
cout<<ic[i]<<" ";
cout<<'\n';
}
}
return 0;
}