P9588 队列

考虑转化问题,将原问题转化为一个长度为 \(q\) 的序列。序列中 \(x\) 表示一段 \(1\sim x\) 的区间。

操作 \(1\)

每次增加时,输入 \(x\),在数组末尾添加一个元素 \(x\),并记录时间 \(t\) 和前缀和 \(s\)。时间表示这个元素在第 \(t\) 个增加操作增加。由于操作 \(4\) 需要求最大值,考虑维护一个单调队列,并执行一次单调队列队尾入队操作,权值为 \(x\),时间为 \(t\)。

操作 \(2\)

维护一个 \(now\) 表示现在已经删除了多少元素,维护一个 \(l\) 表示删除之后序列剩余的元素所处的区间的时间。输入 \(x\),令 \(now\) 增加 \(x\),并逐步向后比较 \(now\) 与前缀和 \(s\) 的值。若大于,说明这一段已经被删除,右移 \(l\)。

操作 \(3\)

考虑在原序列上二分。由于有删除,所以查询当前的 \(x\) 元素实际上就是查询历史第 \(x+now\) 个元素。二分,找到第一个大于 \(x+now\) 的前缀和 \(s\),则这个值必然落在这个区间中。利用 \(s\) 与 \(x+now\) 的差值求出所查询的元素离段尾的距离,然后由段尾元素推回来即可。

操作 \(4\)

考虑单调队列。所有时间小于 \(l\) 的元素都需要出队,因为它们已经被删除。然后取队首,就是最大值。

时间复杂度 \(O(n\log n)\),瓶颈是操作 \(3\)。

#include <bits/stdc++.h>
using namespace std;
struct val
{
long long v,t;
}que[300000];
long long c,q,op,x,t,l=1,now,a[300000],s[300000],ql=1,qr=0;
void add()
{
scanf("%lld",&x);
a[++t]=x,s[t]=s[t-1]+x;
while(x>=que[qr].v&&ql<=qr)qr--;
que[++qr].v=x,que[qr].t=t;
} void del()
{
scanf("%lld",&x);
now+=x;
while(now>=s[l]&&l<=t)l++;
} void getnum()
{
scanf("%lld",&x);
x+=now;
long long bl=l,br=t;
while(bl<br)
{
long long mid=(bl+br)/2;
if(x<=s[mid])br=mid;
else bl=mid+1;
}
printf("%lld\n",a[br]-s[br]+x);
} void getmax()
{
while(que[ql].t<l&&ql<=qr)ql++;
printf("%lld\n",que[ql].v);
} int main()
{
scanf("%lld%lld",&c,&q);
for(int i=1;i<=q;i++)
{
scanf("%lld",&op);
if(op==1)add();
else if(op==2)del();
else if(op==3)getnum();
else if(op==4)getmax();
}
return 0;
}

Luogu P9588 队列 题解的更多相关文章

  1. [Luogu 1160] 队列安排

    Luogu 1160 队列安排 链表H2O H2O H2O模板. 太久不写链表,忘干净了,竟调了半个晚上. 保留备用. #include <cstdio> #include <cst ...

  2. HDU 3415 Max Sum of Max-K-sub-sequence 单调队列题解

    本题又是一题单调队列题解. 技巧就是须要计算好前n项和Sn = a1 + a2 + ... an 这样方便处理. 记录一条单调队列,其意义是: q(head), q(head+1), ...q(tai ...

  3. luogu P1160 队列安排

    二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...

  4. C++版 - 剑指offer 面试题7:用两个栈实现队列 题解

    用两个栈实现队列 提交网址:  http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=1 ...

  5. 【luogu P3946 ことりのおやつ】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3946 交好几遍是因为虽然能过一直有提醒..强迫症qwq #include <bits/stdc++.h ...

  6. BZOJ2453:维护队列——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2453 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到 ...

  7. Luogu P1160队列安排【链表/老文搬家】By cellur925

    原文发表于2018-04-15 08:15:09,我的luogu博客qwq. 看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表. 然而本蒟蒻不久前刚刚学会链表.链表 ...

  8. Luogu P2210 Haywire 题解

    其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...

  9. [Luogu P4178]Tree 题解(点分治+平衡树)

    题目大意 给定一棵树,边带权,问有多少点对满足二者间距离$\leq K$,$n \leq 40000$. 题解 点分治专题首杀!$Jackpot!$ (本来看着题意比较简单想捡个软柿子捏,结果手断了… ...

  10. BZOJ2457 双端队列 题解

    本题直接求解十分困难,因为在不知道整个序列的数字规律时当前所作决策都无法保证最优性. 考虑正难则反,题目转化为将一个非降序列分成尽量少的几段,让每段对应原问题的双端队列. 先将原数组排序,由于原数组下 ...

随机推荐

  1. jwt的个人理解

    概念: jwt全名json web token,是一种web登录验证和授权技术 官网debug:#debug 应用场景: 授权这是使用JWT最常见的场景.一旦用户登录,每个后续请求将包括JWT,允许用 ...

  2. [亲测]ThinkPHP中where方法中变量不解析的解决方法

    2018年5月4日 01:15  血的教训,今天做一个项目,需要批量更新数据,所以where中必须用变量.发现where里的变量不解析并且会直接报错,然后通过搜索发现可以在双引号中的左右加号中包裹变量 ...

  3. symfony3.4修改安全验证默认表配置

    #security.yml security: # ··· providers: our_db_provider: entity: class: AppBundle:Users property: u ...

  4. 2025dsfz集训Day3:DFS搜索与剪枝

    DAY3: DFS搜索与剪枝 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 深搜 深度优 ...

  5. 解决多个if-else的方案

    参考链接: 遇到大量if记住下面的口诀: 互斥条件表驱动 嵌套条件校验链 短路条件早return 零散条件可组合 解释: 互斥条件,表示几个条件之间是冲突的,不可能同时达成的.比如说一个数字,它不可能 ...

  6. Android frida hook (学习分享)

    frida模块 参考: https://www.52pojie.cn/thread-1823118-1-1.html https://www.52pojie.cn/thread-1840174-1-1 ...

  7. SQL 日常练习 (十七)

    五一了, 2020过去近乎一半了, 疫情原因, 哪都没去, 其实与其出去玩, 不如呆着学习, 终身学习, 学无止境, 气有浩然, 这是我从上大学开始一直刻在脑海的训诫. 都说今年很艰难, 回头一想, ...

  8. C# 相等比较

    C# 相等比较 有两种类型的相等: 值相等:即两个值是一样的 引用相等:即引用是一样的,也就是同一个对象 默认地,对于值类型来讲,相等指的就是值相等:对于引用类型,相等就是指的引用相等. int a ...

  9. 告别安装烦恼!Linux下MySQL一站式部署宝典

    前言 本次安装部署主要针对Linux环境进行安装部署操作,系统位数64 getconf LONG_BIT 64 MySQL版本: v5.7.38 一.下载MySQL MySQL下载地址:https:/ ...

  10. 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(4)

    1.问题描述: LoginWithHuaweiIDButton不支持深色模式下定制文字和loading样式? 解决方案: LoginWithHuaweiIDButtonParams 中的有个suppo ...