算法:双端队列

简介: 题目:给定一个双端队列,初始时队列为空。你要对其进行 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了!

目录
相关文章
|
1天前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
3月前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
3月前
|
存储 算法
【数据结构和算法】--队列的特殊结构-循环队列
【数据结构和算法】--队列的特殊结构-循环队列
25 0
|
1月前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
1月前
|
算法
【数据结构与算法】优先级队列
【数据结构与算法】优先级队列
12 0
|
1月前
|
存储 算法
【数据结构与算法】队列(顺序存储)
【数据结构与算法】队列(顺序存储)
13 0
|
3月前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
3月前
|
算法
【C/数据结构和算法】:栈和队列
【C/数据结构和算法】:栈和队列
44 1
|
3月前
|
算法 调度 Python
数据结构与算法-队列篇
数据结构与算法-队列篇
26 3
|
3月前
|
算法 C语言
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
33 2