牛客~~wannafly挑战赛19~A 队列
链接:https://www.nowcoder.com/acm/contest/131/A
来源:牛客网
题目描述
ZZT 需要在这个队列上执行 P 次操作,操作分两种:
FIRST X: 将元素 X 移到队头。
LAST X: 将元素 X 移到队尾。
在 P 次操作之后,ZZT 想知道队列中的元素的排列方式,由于他最近很忙,因此需要请你帮他解决这个问题。
输入描述:
第一行输入一个正整数 N,表示队列的大小。
第二行输入 N 个正整数,Q
1
, Q
2
, Q
3
, ... ..., Q
N
,Q
i
表示队列中的第 i 个元素。保证这 N 个数是 N 的一个全排列。
第三行输入一个正整数 P,表示接下来要进行的操作次数。
1 ≤ Qi ≤ N.
1 ≤ P ≤ 105.
Si
1 ≤ Xi ≤ 105.
输出描述:
输出 N 个正整数,表示 P 次操作之后的队列。
输入例子:
4
4 2 1 3
3
FIRST 4
LAST 2
LAST 1
输出例子:
4 3 2 1
-->
输出
4 3 2 1
题意:中文题很明了了,要求对一长度为n的=队列进行m次操作,将指定元素插在队头或者队尾
题解:我们用两个数组进行保存和一个set容器进行操作
先将数据和操作分别读入
因为我们可以知道,操作从前往后会将数据不断的往队列里面压缩,所以我们将操作存起来倒着操作
这样就可以保证元素的顺序
用set容器来维护,确保临时数组b中没有重复元素出现
代码如下
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=1e5+;
int a[maxn], b[maxn];
set<int> s;
char ins[maxn][];
int v[maxn];
int main(){
int n;
scanf("%d", &n);
for(int i=;i<n;i++)
scanf("%d", &a[i]);
int m;
scanf("%d", &m);
for(int i=;i<m;i++){
scanf("%s%d", ins[i], &v[i]);
}
int head=, tail=n-;
//从0开始的头部操作和从n-1开始的尾部操作,分别插入
//tips:操作完后b数组中可能有空的位置没有被占据 for(int i=m-;i>=;i--){
int val=v[i];
if(s.count(val)){
continue;
}
s.insert(val);
if(ins[i][]=='F'){
b[head++]=val;
}else{
b[tail--]=val;
}
} //我们将a中没有插入到b中的数组插入到b中
for(int i=;i<n;i++)
if(!s.count(a[i])){
b[head++]=a[i];
}
head=;
//重新插入覆盖,保证队列的完整性
for(int i=;i<n;i++)
if(b[i]!=){
a[head++]=b[i];
}
//格式要求很重要
for(int i=;i<head;i++)
printf("%d%c", a[i], i==n-?'\n':' '); return ;
}
牛客~~wannafly挑战赛19~A 队列的更多相关文章
- 牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树)
牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树) 链接:https://ac.nowcoder.com/acm/problem/15706 现在需要您来帮忙维护这个名册, ...
- 牛客Wannafly挑战赛23 B.游戏
游戏 题目描述 小N和小O在玩游戏.他们面前放了n堆石子,第i堆石子一开始有ci颗石头.他们轮流从某堆石子中取石子,不能不取.最后无法操作的人就输了这个游戏.但他们觉得这样玩太无聊了,更新了一下规则. ...
- 牛客网挑战赛19 B,C,F
链接:https://www.nowcoder.com/acm/contest/131/B来源:牛客网 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子矩阵,使得这 ...
- 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...
- 牛客Wannafly挑战赛26E 蚂蚁开会(树链剖分+线段树)
传送门 题面描述 一颗n个节点的树,m次操作,有点权(该节点蚂蚁个数)和边权(相邻节点的距离). 三种操作: 操作1:1 i x将节点i的点权修改为x.(1 <= i <= n; 1 &l ...
- 牛客Wannafly挑战赛11E 白兔的刁难
传送门 如果大力推单位根反演就可以获得一个 \(k^2logn\) 的好方法 \[ans_{t}=\frac{1}{k}\sum_{i=0}^{k-1}(w_k^{-t})^i(w_k^i+1)^n\ ...
- 牛客Wannafly挑战赛23F 计数(循环卷积+拉格朗日插值/单位根反演)
传送门 直接的想法就是设 \(x^k\) 为边权,矩阵树定理一波后取出 \(x^{nk}\) 的系数即可 也就是求出模 \(x^k\) 意义下的循环卷积的常数项 考虑插值出最后多项式,类比 \(DFT ...
- 牛客 Wannafly挑战赛27 D 绿魔法师
传送门 \(\color{green}{solution}\) 分析下,在\(1e5+1\)内,一个数的约数个数最多为\(2^{6}\)个,所以我们可以考虑枚举约数 复杂度\(O(N^{2^{6 \t ...
- [牛客Wannafly挑战赛27D]绿魔法师
description newcoder 给你一个空的可重集合\(S\). \(n\)次操作,每次操作给出\(x\),\(k\),\(p\),执行以下操作: \(opt\ 1\):在S中加入x. \( ...
随机推荐
- VS2013使用自带的数据库 Microsoft SQL Server 2012 Express LocalDB
注:DeptLocalDB:自己取的数据库实例名称 DeptSharedLocalDB:自己取的实例共享名称np:\\.\pipe\LOCALDB#SH7C6ED5\tsql\query:命名管道名称 ...
- C#基础-异常处理与自定义异常
异常处理 static void Main(string[] args) { Console.WriteLine("请输入一个数字:"); try { // 监测可能出现异常代码 ...
- js面向(基于)对象编程—类(原型对象)与对象
JS分三个部分: 1. ECMAScript标准--基础语法 2. DOM Document Object Model 文档对象模型 3. BOM Browser Object Moldel 浏览 ...
- Redis 数据类型List链表
list类型是一个双向链表. 上进上出:栈 例1 lpush newlogin tom lpush newlogin jim lpush newlogin php lpush newlogin th ...
- SAPバリアント
SAPバリアント VARI バリアント VARID バリアント一覧 VARIT バリアントテキスト VARIS バリアント割当 TVARV バリアント変数(クライアント非依存) TVARVC バリ ...
- 笔记-python-lib-requests常用类/方法/属性
笔记-python-lib-requests常用类/方法/属性 1. requests模块常用类/方法/属性 在使用中发现对requests模块不够熟悉,写了几个案例后重新整理了一下文档,罗 ...
- Android stadio 插件推荐--ok gradle
今天发现了一个好玩的插件,对于想要知道依赖怎么写的同学很有帮助. 写这篇文章的意义在于,以后我忘了的话,可以自己在博客中找到. 上地址: https://github.com/scana/ok-gra ...
- Java Spring Controller 获取请求参数的几种方法
技术交流群:233513714 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...
- USACO Section1.5 Number Triangles 解题报告
numtri解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...