首页 > 其他分享 >P9588 队列

P9588 队列

时间:2023-08-29 12:44:21浏览次数:47  
标签:dl 队列 P9588 long len he lld ta

思路

观察发现 \(x\),\(y\),\(z\) 都可以很大,所以如果直接用队列老老实实地操作,肯定过不了。

因为每次加入都是 \(1,2,3,\cdots x\) 所以这段是连续的,所以我们考虑一段一段的存入队列,记录每一段的左右端点。

操作 \(2\) 的删除,就一段一段地删除,如果删不完一段,就改这一段的左端点。

操作 \(3\) 的查询可以记录每段的长度的前缀和(如果用操作 \(2\) 的办法的话就会 TLE)。

操作 \(4\) 的最大值只可能出现在每段的 \(x\),考虑用 multiset 存 \(x\),但是不知道为什么我的 multiset 炸了,改成 map 和 set 才对。

AC code

#include<bits/stdc++.h>
using namespace std;
struct node{long long l,r;}dl[200005];
long long c,q,op,x,he,ta,len[200005];
set<long long>s;
map<long long ,int>m;
int main()
{
	scanf("%lld%lld",&c,&q);
	while(q--)
	{
		scanf("%lld",&op);
		if(op==1) scanf("%lld",&x),dl[++ta].l=1,dl[ta].r=x,s.insert(x),m[x]++,len[ta]=dl[ta].r+len[ta-1];
		else if(op==2)
		{
			scanf("%lld",&x);
			while(x>=dl[he+1].r-dl[he+1].l+1){x-=dl[he+1].r-dl[he+1].l+1,++he;if(m[dl[he].r]==1) s.erase(dl[he].r);m[dl[he].r]--;}
			if(x) dl[he+1].l+=x;
		}
		else if(op==3)
		{
			scanf("%lld",&x);
			x+=len[he]+dl[he+1].l-1;
			long long l=he,r=ta,mid,ansp;
			while(l<=r)
			{
				mid=l+r>>1;
				if(x>len[mid]) ansp=mid,l=mid+1;
				else r=mid-1;
			}
			printf("%lld\n",x-len[ansp]);
		}
		else
		{
			auto i=s.end();--i;
			printf("%lld\n",*i);
		}
	}
	return 0;
}

标签:dl,队列,P9588,long,len,he,lld,ta
From: https://www.cnblogs.com/One-JuRuo/p/17664453.html

相关文章

  • 手撕代码之栈和队列
    文章目录一、括号匹配(leetcode20)二、最小栈(leetcode155)三、两个栈实现一个队列(leetcode232)一、括号匹配(leetcode20)classSolution{public:boolisValid(strings){if(s.empty())returntrue;stack<char>stk;stk.push(s[0]......
  • 基于Redis的队列
    1.队列//发布@ApiOperation(value="put普通队列")@PostMapping("/queuePut")publicObjectput(@RequestBodyCommonMapRespDTOrespDTO){for(inti=0;i<20;i++){//队列RQueue<Object>queue=redissonClient.g......
  • redis 消息队列方案
    List实现消息队列使用LPUSH、RPOP左进右出或RPUSH、LPOP右进左出,实现消息顺序消费使用BLPOP、BRPOP这种阻塞式读取的命令,实现消息及时消费ack机制使用,使用index读取list的消息,正常消费完成后再使用POP删除//使用redission实现@Slf4j@ServicepublicclassQue......
  • 栈和队列在数据结构中的应用
    文章目录理解栈和队列的概念及其特点栈的应用和操作队列的应用和操作结论......
  • 队列和栈
    队列和栈是两种常见的数据结构,常用于存储和操作数据的方式。它们有不同的特点和用途。队列(Queue)是一种先进先出(First-In-First-Out,FIFO)的数据结构。可以将其想象成排队的人群,仅允许在队尾插入元素,从队头移除元素。新元素总是加入到队列的末尾,而最先加入的元素会最先被移除。队列......
  • 堆(优先队列)
    又名优先队列堆由完全二叉树构成,其每个节点都有一个键值,且每个节点的键值都大于等于/小于等于其父亲的键值每个节点的键值都大于等于其父亲键值的堆叫做小根堆,否则叫做大根堆。STL中的priority_queue其实就是一个大根堆我们模拟的是小根堆,下标从1开始1是根节点,令\(x\)的左......
  • 二叉树层序遍历队列实现
    参考:二叉树的层序遍历(两种方法实现)_askunix_hjh的博客-CSDN博客题解|#求二叉树的层序遍历#_牛客博客(nowcoder.net)题解二:BFS(迭代)主要思路:广度优先8.27用到的思路是广度优先,循环,不是递归......
  • hdu:Rescue(bfs+优先队列)
    ProblemDescriptionAngelwascaughtbytheMOLIGPY!HewasputinprisonbyMoligpy.TheprisonisdescribedasaN*M(N,M<=200)matrix.ThereareWALLs,ROADs,andGUARDsintheprison.Angel’sfriendswanttosaveAngel.Theirtaskis:approach......
  • [算法学习笔记][刷题笔记] 单调队列优化 dp
    前置知识·单调队列单调队列顾名思义,一般用于解决滑动RMQ问题。它的原理非常简单。我们维护一个双端队列,这个双端队列只维护可能成为区间最值的元素。最基础的单调队列,例如滑动窗口。直接依据题意维护即可。这里提供单调队列模板(STLdeque版)单调队列模板(STLdeque版)......
  • 13、从0到1实现SECS协议之优先级队列(SECS-I)
    13、从0到1实现SECS协议之优先级队列(SECS-I)逻辑和HSMS协议中的优先级队列一样,只不过存储的数据变了而已。1、并发安全的优先级队列packagequeueimport( "secs-gem/common" "secs-gem/secs/packets" "secs-gem/secsgem" "container/heap" "context" "sync......