/*Inversion
2008-09-08 22:49:35 Accepted 1201 C++ 00:00.00 836K 天将降大任于我
当P序列转换为I序列时, i前有多少个比其大的数,则下标为i的位置填该数,即得到以I开头的序列。以I开头的序列转换成P开头的序列则是,位置为i的数表示的是:在P序列中,数字i前面有多少个比它大的数,即得到P序列
当输入为cin时,chaar字符型数据可以用比较形式if(c=='I'),不需要用strcmp()函数
*/
#include<iostream>
using namespace std;
const int N=50;
int p[N+1],I[N+1],s[N+1];
int main()
{
int n,i,j,num;char c;
while(cin>>n&&n)
{ memset(s,0,sizeof(s));
memset(p,0,sizeof(p));
cin>>c;
for(i=0;i<n;i++)
cin>>p[i];
if(c=='P')
{
for(i=0;i<n;i++) //检查前面是否有比它大的数,有多少个就加到多少个,num
{ num=0;
for(j=0;j<=i-1;j++)
if(p[j]>p[i]) num++;
s[p[i]]=num; //然后将这个数作为下标存储num,作为I输出的第p[i]个数
}
for(i=1;i<n;i++) cout<<s[i]<<" ";
cout<<s[n]<<endl;
}
else if(c=='I') //当c为I时
{
for(i=0;i<n;i++)
{ num=0;
for(j=1;;j++)
{
if(s[j]==0) num++; //从一开始算起,一直找到p[i]个没有标记过的(标记过的都比它小),
if(num==p[i]+1) break; //则达到p[i]个的那个位置+1即为i+1所在位置
}
s[j]=i+1;
}
for(i=1;i<n;i++) cout<<s[i]<<" ";
cout<<s[n]<<endl;
}
}
return 0;
}
心难泰,世风坏,旧时正气今何在?正义寡,人情薄,闻道虽多,茅塞不开。怪!怪!怪!
空等待,几多载,冲出重围人心快!暴雨打,狂风袭,任他折磨,此志难改。耐!耐!耐!