单调队列优化题:最大数(P1198)
题目描述
现在请求你维护一个数列,要求提供以下两种操作:
1、 查询操作。
语法:Q L
功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。
限制:不超过当前数列的长度。(L>0)
2、 插入操作。
语法:A n
功能:将n加t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。
限制:n是整数(可能为负数)并且在长整范围内。
注意:初始时数列是空的,没有一个数。
输入格式
第一行两个整数,M 和 D,其中 M 表示操作的个数,D 如上文中所述。
接下来的 M 行,每行一个字符串,描述一个具体的操作。语法如上文所述。
输出格式
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
这。。。不用给样例了吧。。。我jio着题目描述很清楚了。。。
思路:
每输入一个数,就更新一下单调队列,使它始终保存后i个之中的最大值。
具体操作:
插入一个新数,与队尾比较,如果比队尾大那么队尾出队(因为这个新数比队尾在原数组中更靠后,如果同时包含队尾和这个新数的区间,最大值显然是这个新数,但是同时因为队尾出队了,所以队列里面的顺序就不是原数组的顺序了,需要记录下每一各进队的的时间编号)
例如题目样例(还是给出来了,真香.jpg)
5 100
A 96
Q 1
A 97 ---->96
Q 1 93
Q 2 96
我们模拟一下样例:
先A入96%100=96,此时把他入队,time=1;
然后查询后1大的数,我们在编号中(这个时候因为要求后i个中最大值,所以查询编号要改为cnt-i+1)找到第一个大于等于(lower_bound)1的,显然,如果当前队列中的元素x编号小于要查询的这个数,那么显然这个数是在原数组的后i个数之前,不能算在答案里
bb这么多,一共就一个数,直接输出即可,输出:96
再A入(97+96)%100=93,93的time=2;
查询后1大的数,此时cnt-i+1=2;所以找到队列里面的93。
查询后2大的数,此时cnt-i+1=1;所以找到队列里面的96。
思路就这么简单,连我这样的小蒟蒻都会了,相信你们一定也可以!
附上代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=200000+10;
int n,mod,time;
int q[maxn],head=1,tail=0;
int id[maxn];
void add(int x){
while(head<=tail&&x>=q[tail])tail--;
q[++tail]=x;
id[tail]=++time;
}
int sou(int x){
x=time-x+1;
int i=lower_bound(id+1,id+tail+1,x)-id;
return q[i];
}
int main(){
int last=0;
scanf("%d%d",&n,&mod);
for(int i=1;i<=n;i++){
char ch[2];int a;
scanf("%s%d",ch,&a);
if(ch[0]=='A'){
a=(a+last)%mod;
add(a);
}else if(ch[0]=='Q'){
last=sou(a);
printf("%d\n",last);
}
}
return 0;
}
单调队列优化题:最大数(P1198)的更多相关文章
- [BZOJ4182]Shopping (点分治+树上多重背包+单调队列优化)
[BZOJ4182]Shopping (点分治+树上多重背包+单调队列优化) 题面 马上就是小苗的生日了,为了给小苗准备礼物,小葱兴冲冲地来到了商店街.商店街有n个商店,并且它们之间的道路构成了一颗树 ...
- 【刷题笔记】DP优化-单调队列优化
单调队列优化 眼界极窄的ZZ之前甚至不会单调队列--(好丢人啊) 单调队列优化的常见情景: 转移可以转化成只需要确定一个维度,而且这个维度的取值范围在某个区间里 修剪草坪 这个题学长讲的好像是另外一个 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- bzoj1855: [Scoi2010]股票交易--单调队列优化DP
单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- uvalive4327(单调队列优化)
这题我有闪过是用单调队列优化的想法,也想过有左右两边各烧一遍. 但是不敢确定,搜了题解,发现真的是用单调队列,然后写了好久,调了好久下标应该怎么变化才过的. dp[i][j] 表示走到第i行,第j个竖 ...
- 1023: [SHOI2008]cactus仙人掌图(DP+单调队列优化)
这道题吗= =首先解决了我多年以来对仙人掌图的疑问,原来这种高大上的东西原来是这个啊= = 然后,看到这种题,首先必须的就是缩点= = 缩点完之后呢,变成在树上找最长路了= =直接树形dp了 那么那些 ...
- BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
2806: [Ctsc2012]Cheat 题意: 多个主串和多个询问串,每次询问将询问串分成多个连续子串,如果一个子串长度>=L且在主串中出现过就是熟悉的 如果熟悉的字符串长度>=询问串 ...
- [小明打联盟][斜率/单调队列 优化dp][背包]
链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...
随机推荐
- Vue指令之条件渲染
1. v-show 根据表达式的真假值,切换元素的 display CSS属性.表达式为false时,p标签被赋予 style="display:none;" <p v-sh ...
- Centos 镜像文件下载
1. Centos 官网 https://www.centos.org 进入下载页面,选择下载的版本即可 不推荐在官网下载,因为官网上提供的下载地址很多是国外网站,下载太慢了 2. 阿里云Centos ...
- ui自动化--xpath
xpath //*代表从根节点,查找所有匹配到的元素.在filepath中输入后回车,会发现整个页面所有元素都被虚线选中 //表示跟节点 []代表要用属性定位 @表示要用什么属性 定位完成后,对应页面 ...
- JS -- DOM(文档对象模型)
认识DOM(文档对象模型) DOM(Document Object Model):定义访问和处理HTML文档的标准方法. DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). < ...
- Python爬虫和函数调试
一:函数调试 用之前学过的try···except进行调试 def gameover(setA,setB): if setA==3 or setB==3: return True else: retu ...
- python:一切皆对象
学过java语言的童鞋都知道,java是一门面向对象语言,其基本思想就是一切皆对象.Python也是一样的,甚至Python将面向对象思想贯彻地更加彻底,因为在Python中,class本身是一个 ...
- powershell中使用Send-MailMessage发送邮件
在powershell中我们可以使用Send-MailMessage发送邮件,一般都是有这个命令的 笔者的总结是鉴于公司的环境的,大家在借鉴时,需要根据自己的实际情况进行修改 1.你笔者测试的格式如下 ...
- Java10新特性
局部变量的类型推断 这个功能减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺 使用举例 public static void main(String[] args) { // 使用var ...
- Spring 集成 RabbitMQ
pom.xml <dependency> <groupId>org.springframework.amqp</groupId> <artifactId> ...
- springboot项目整合rabbitMq涉及消息的发送确认,消息的消费确认机制,延时队列的实现
1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...