题目描述

ZZT 创造了一个队列 Q。这个队列包含了 N 个元素,队列中的第 i 个元素用 Qi 表示。Q1 表示队头元素,QN 表示队尾元素。队列中的元素是 N 的一个全排列。 ZZT 需要在这个队列上执行 P 次操作,操作分两种:FIRST X: 将元素 X 移到队头。LAST X: 将元素 X 移到队尾。在 P 次操作之后,ZZT 想知道队列中的元素的排列方式,由于他最近很忙,因此需要请你帮他解决这个问题。

输入描述:

第一行输入一个正整数 N,表示队列的大小。
第二行输入 N 个正整数,Q1,Q2,Q3,...QN,Qi表示队列中的第 i 个元素。保证这 N 个数是 N 的一个全排列。
第三行输入一个正整数 P,表示接下来要进行的操作次数。
接下来 P 行,第 i 行输入一个字符串 Si 以及一个正整数 Xi,表示一次操作。
1 ≤ N ≤ 105.
1 ≤ Qi ≤ N.
1 ≤ P ≤ 105.
S { “FIRST”, “LAST” }.
1 ≤ Xi ≤ 105.

输出描述:

输出 N 个正整数,表示 P 次操作之后的队列。

输入例子:
4
4 2 1 3
3
FIRST 4
LAST 2
LAST 1
输出例子:
4 3 2 1

-->

示例1

输入

4
4 2 1 3
3
FIRST 4
LAST 2
LAST 1

输出

4 3 2 1
解题思路:以half为中心,先分别向左、向右标记一下每个元素的位置,然后进行p次操作,如果str为"FIRST",则将原来ml这个位置的值s[p[x]]赋为0,然后重新赋值s[ml--]=x;反之,进行类似操作,最后遍历一下每个位置1~maxn,如果s[i]不为0,则输出此位置上的元素即可,水过!
AC代码一之简单粗暴:
 #include<bits/stdc++.h>
using namespace std;
const int maxn=;//长度开比4倍大
const int half=;//长度开比2倍大
int n,p,x,ml,mr,q[maxn],s[maxn],r[maxn];string str;
int main(){
cin>>n;memset(r,,sizeof(r));memset(s,,sizeof(s));ml=half,mr=half+;
for(int i=;i<=n;++i)cin>>q[i];
for(int i=n/;i>=;--i){s[ml]=q[i];r[q[i]]=ml--;}
for(int i=n/+;i<=n;++i){s[mr]=q[i];r[q[i]]=mr++;}
cin>>p;
while(p--){
getchar();cin>>str>>x;
if(str=="FIRST"){s[r[x]]=;s[ml]=x;r[x]=ml--;}
else{s[r[x]]=;s[mr]=x;r[x]=mr++;}
}
for(int i=,k=;i<maxn;++i)
if(s[i]!=){k++;cout<<s[i]<<(k==n?'\n':' ');} return ;
}

AC代码二之sort简单过:

 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,p,x,head,tail,q[maxn],site[maxn];string str;
bool cmp(int a,int b){return site[a]<site[b];}//按实际位置排序
int main(){
cin>>n;
for(int i=;i<n;++i){cin>>q[i];site[q[i]]=i;}
cin>>p;head=-,tail=n;
while(p--){
getchar();cin>>str>>x;
if(str=="FIRST")site[x]=head--;
else site[x]=tail++;
}
sort(q,q+n,cmp);
for(int i=;i<n;++i)cout<<q[i]<<(i==n-?'\n':' ');
return ;
}

Wannafly挑战赛19 A-队列Q的更多相关文章

  1. 牛客~~wannafly挑战赛19~A 队列

    链接:https://www.nowcoder.com/acm/contest/131/A来源:牛客网 题目描述 ZZT 创造了一个队列 Q.这个队列包含了 N 个元素,队列中的第 i 个元素用 Qi ...

  2. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  3. Wannafly挑战赛19 B矩阵

    矩阵 思路: 预处理好前缀和,枚举上边界和下边界,将二维变成一维,用单调队列找满足题意的最小前缀 复杂度,O(r*r*c) 代码: #pragma GCC optimize(2) #pragma GC ...

  4. Wannafly挑战赛7 C - 小Q与氪金游戏

    题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...

  5. Wannafly挑战赛19:C. 多彩的树

    传送门 $k$的范围非常小, $O(n2^k)$求出状态最多为$S$的路径数, 然后容斥. #include <iostream> #include <sstream> #in ...

  6. Wannafly挑战赛26-F. msc的棋盘(模型转化+dp)及一类特殊的网络流问题

    题目链接 https://www.nowcoder.com/acm/contest/212/F 题解 我们先考虑如果已知了数组 \(\{a_i\}\) 和 \(\{b_i\}\),如何判断其是否合法. ...

  7. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  8. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  9. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

随机推荐

  1. Android jdbc连接mysql报错解决方案 (Communications link failure)

    最近调试安卓连接mysql真是心态爆炸,快两天才搞出来.以下整理一些常见问题. 检查manifest文件里网络权限是否打开 检查数据库IP是否有问题(包括一些沙雕错误,比如是不是在ip首或尾多了个空格 ...

  2. jdk版本特性

    https://segmentfault.com/a/1190000004419611 java5 泛型 枚举 装箱拆箱 变长参数 注解 foreach循环 静态导入 格式化 线程框架/数据结构 Ar ...

  3. CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现)

    CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现) 传送门 如果想要一个凸多边形不退化为凹多边形,那么任意的相邻的三个点必然最多形成一条直线.因此我们可以求 ...

  4. 【Codeforces 584D】Dima and Lisa

    [链接] 我是链接,点我呀:) [题意] 让你把一个奇数n分成最多个质数的和 [题解] 10的9次方以内,任意两个质数之间的差距最大为300 因此可以这样,我们先从i=n-2开始一直递减直到i变成最大 ...

  5. 用Windows自带DOS命令提示符 制作U盘启动盘

    Windows & DOS命令提示符 & U盘 & 启动盘 用Windows自带DOS命令提示符 制作U盘启动盘.docx http://xgqfrms.blog.163.co ...

  6. Swift: 转换NSString to String

    如下代码获取一个String?的结果 let s = NSString(data: data, encoding: encoding) return s as? String

  7. 杭电 1548 A strange lift(广搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Others) ...

  8. Android对方向感应器的封装调用

    Android自动的SensorManager使用起来已经很方便,但由于一些情况我们希望对其中的功能进行封装: 只使用个别的sensor,功能相对单一 要对sensor返回的raw data进行算法处 ...

  9. android音乐播放器开发 SweetMusicPlayer 智能匹配本地歌词

    上一篇写了使用MediaPlayer播放音乐,http://blog.csdn.net/huweigoodboy/article/details/39861539. 代码地址:https://gith ...

  10. 防遗忘笔记,Fedora交叉编译window下的virt-iewer的汉化

    1. 汉化代码里的资源 virtviewer使用的是gettex的方案是标准的linux里国际化的方案.按道理仅仅须要改动virtualviewer/po/zh_CN.po的文件. 编译. 然后确认在 ...