题目大意:
有一个序列{A1,A2,…,An},对应有一个翻转表B1,B2,…,Bn。Bj表示j的左边有Bj个比j大的数,可参考例子
根据‘P’,生成翻转表,‘I’,生成原序列,输出
解题思路:
无
代码如下:
#include <iostream>
using namespace std;
int main()
{
int n, x[100];
while(cin >> n && n)
{
char operation;
cin >> operation;
for(int i = 1; i <= n; i += 1)
cin >> x[i];
int ans[100] = { 0 };
if(operation == 'P')
{
int pos[100];
for(int i = 1; i <= n; i++)
pos[x[i]] = i;
for(int i = 1; i <= n; i++)
for(int j = 1; j < pos[i]; j++)
if(x[j] > i)
ans[i]++;
}
if(operation == 'I')
{
for(int i = 1; i <= n; i++)
{
int cnt = 0, j = 1;
while(true)
{
if(ans[j] == 0)
cnt++;
if(cnt == x[i] + 1)
break;
j++;
}
ans[j] = i;
}
}
for(int i = 1; i <= n; i++)
cout << ans[i] << (i == n ? '\n' : ' ');
}
return 0;
}