算法:双端队列

简介: 题目:给定一个双端队列,初始时队列为空。你要对其进行 q 次操作,每次操作可能是以下三种之一:

题目:

给定一个双端队列,初始时队列为空。

你要对其进行 q 次操作,每次操作可能是以下三种之一:

L x,从队列的左端插入整数 x。

R x,从队列的右端插入整数 x。

? x,请你计算为了使已经处于队列中的整数 x 位于队列的最左端或最右端,至少需要从最左端或最右端弹出多少个数字。

保证操作 3 一定合法( ? x 中的 x 一定已经处于队列之中)。

每个数字最多被插入到队列中 1 次(队列中一定不会存在重复数字)。

注意,操作 3 只是询问最少需要弹出多少数字,不是真的要弹出它们,队列中的数字始终不会减少。

输入格式:

第一行包含整数 q。

接下来 q 行,每行包含一个操作信息,格式如题所述。

输出格式:

对于每个操作 3,输出一行,一个整数表示结果。

数据范围:

对于 30% 的数据,1≤q≤30,1≤x≤30。

对于 100% 的数据,1≤q≤2×105,1≤x≤2×105。

保证至少包含一个操作 3,

保证操作 1 和 2 不会重复插入数字。

保证操作 3 不会询问队列中不存在的数字。

输入样例1:

8

L 1

R 2

R 3

? 2

L 4

? 1

L 5

? 1

输出样例1:

1

1

2

输入样例2:

10

L 100

R 100000

R 123

L 101

? 123

L 10

R 115

? 100

R 110

? 115

输出样例2:

0

2

1

分析:这道题不用再初始队列这么麻烦,之前我们都是通过下标来确定元素是什么,这次我们用元素作为下标,存入的值为下标,利用这样的思路,很巧妙就解决了问题。

源码:

include

include

include

using namespace std;

const int N = 200010;

int n,arr[N];

int main()

{

cin >> n;
int l=0,r=-1;
char c;
int i;
while (n -- )
{
    getchar();
cin >> c>>i;
if(c=='L')
    {
        arr[i]=--l;
    }else if(c=='R')
    {
        arr[i]=++r;
    }else if(c=='?')
    {
cout << min(r-arr[i],arr[i]-l)<<endl;
    }
}
return 0;

}

最后:这题本身不难,但是我看完讲解后,卡住了很长时间,原来是赋值的时候等号多写了(呜呜呜)emo了!

目录
相关文章
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
7月前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
7月前
|
存储 算法
【数据结构和算法】--队列的特殊结构-循环队列
【数据结构和算法】--队列的特殊结构-循环队列
44 0
|
3月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
35 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
4月前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
5月前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
5月前
|
算法
【数据结构与算法】优先级队列
【数据结构与算法】优先级队列
27 0
|
5月前
|
存储 算法
【数据结构与算法】队列(顺序存储)
【数据结构与算法】队列(顺序存储)
48 0
|
7月前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
7月前
|
算法
【C/数据结构和算法】:栈和队列
【C/数据结构和算法】:栈和队列
56 1

热门文章

最新文章

下一篇
开通oss服务