原标题传输
数组必须完全排序
这种方法必须是完全排列的,即互不相等的数字序列。
思路:输入时,从数组中间开始输入(下标必须大于要执行的操作数),将数字的位置存储到另一个数组中。 如果需要将一个元素移动到队头,则先在队头加一,然后赋值,最后修改元素的位置。
2145:AK王国系列题-百官排名
时间限制:1 秒内存限制:256 MB
已提交:60 已解决:33
[提交] [状态] [讨论区] [提议者:admin]
问题描述
AK王国的前国王喜欢按照自己的喜好来排列文武官员。
已知有N位文武官员,其编号从1到N,他们的初始顺序是N的总排列。
前国王喜欢做两件事:
第一个X:将编号为X的文武官员移到所有文武官员面前。
最后X:将编号为X的文武官员移至所有文武官员的后面。
前任国王在其统治期间曾执行过 p 次此操作。
既然你可能想继承他的王位,那么你就需要了解现在的文武官员的秩序。
进入
第一行输入一个正整数N,表示有N个文武官员。
第二行输入N个正整数,Q1,Q2,Q3,……,QN,Qi表示队列中的第i个元素。 确保这N个数字是N的完整排列。
第三行输入一个正整数P,表示接下来要执行的操作数。
接下来,第P行,第i行输入一个字符串Si和一个正整数Xi,代表一个运算。
1 ≤ N ≤ 10^5。
1≤Qi≤N。
1 ≤ P ≤ 10^5。
Si属于{“FIRST”,“LAST”}。
1 ≤ Xi ≤ 10^5。
输出
输出N个正整数,表示P次运算后文武官员的顺序。
输入样本
4 4 2 1 3 3 FIRST 4 LAST 2 LAST 1
样本输出
4 3 2 1
来源/分类
中正
交流代码:
#include //反复把元素移到队头或队尾,这些数必须是全排列(每个数都不相同)
#include
#include
using namespace std;
const int maxn=1e6;//maxn的大小要根据数组的大小以及操作次数来定
int n,p,x,a[maxn],b[maxn];
char str[7];
int main()
{
scanf("%d",&n);
int start=2e5,end=2e5+n;
for(int i=start;i