反复将元素移动到队列的头部或尾部(模拟队列的数组方法)

 2024-02-07 05:02:01  阅读 0

原标题传输

数组必须完全排序

这种方法必须是完全排列的,即互不相等的数字序列。

思路:输入时,从数组中间开始输入(下标必须大于要执行的操作数),将数字的位置存储到另一个数组中。 如果需要将一个元素移动到队头,则先在队头加一,然后赋值,最后修改元素的位置。

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

标签: 文武

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码