BZOJ 1012 最大数maxnumber
Description
现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。
Input
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足(0
Output
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
Sample Input
5 100
A 96
Q 1
A 97
Q 1
Q 2
Sample Output
96
93
96
看到本题,首先想到线段树。线段树写了一半发现, 插入操作 完成不了。所以转化思路,维护数组完成插入,查找的数据结构有哪些呢?Splay?SBT?这些虽说可以很快地解决此题,但是面对一百多行的模板依倍感压力。。。。。所以在这里介绍一个特殊的数据结构------单调队列。这种数据结构不太常用,但是对于这种题还是可以飞速解决的。单调队列,顾名思义,就是一个队列中的关键元素,按照某种方式排列。例如单调递增或单调递减。这里的单调队列是一个单调递减的队列,接下来就是单调队列的使用方法。
首先单调队列一定是单调的,此题中因为查找的是后l位的最大值,所以我们设一个队列名为maxx[]。maxx[i]表示从i到数列结尾的最大值。查找末尾L位的最大值时,输出maxx[len-L+1]即可。len为数列的长度。好了,队列完成了,然后就是该怎么更新队列的值了------
我们假定一个数列 1 2 3 4 5 这个数列不管询问末尾几位的最大值均是 5 那么在maxx数组中就可以这样存:5 5 5 5 5 全填上 5 就好了这样不管L是几,我们在输出maxx[len-L+1]时都不会影响。再比如这个数列 1 2 5 4 3 这样在单调对列中的存储方式为 5 5 5 4 3。假如询问后一位的最大值时返回值是 3 ,末两位的返回值是 4。末3、4、5位均是5。可以发现一个规律,在插入元素时,只要这个元素比队尾的元素小则加入队尾,比队尾元素大则替换之,直到找到比该元素小的为止,这就是单调队列的精华所在!!
贴下代码:(有一些要注意的在代码中体现)
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=;
long long int a[MAXN],maxx[MAXN];//long long的原因是在不断累加的过程中可能会超出整形的范围
int last=,M,mod,len;// 我可是有亲身经历的
int main()
{
scanf("%d%d",&M,&mod);
for(int t=;t<=M;t++){
char c;
int x;
scanf("%s%d",&c,&x);
if(c=='A'){
a[++len]=(last+x)%mod;
for(int i=len;i>=;i--)//因为是单调递减,所以从最后一位开始比较
if(maxx[i]<a[len]) maxx[i]=a[len];//若队列中的值比插入值小则替换
else break;//若比插入值大则停止,因为越靠近队首值越大,无须比较
}
else{
printf("%d\n",maxx[len-x+]);//直接输出即可
last=maxx[len-x+];
}
}
}
可以转载,请注明来源!!!
BZOJ 1012 最大数maxnumber的更多相关文章
- 【单调栈】Bzoj 1012: 最大数maxnumber
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 6255 Solved: 2676[Submi ...
- BZOJ 1012 最大数maxnumber 线段树
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1012 题目大意: 见链接 思路: 直接用线段树模拟一下就可以了. #include&l ...
- [Bzoj]1012最大数maxnumber
题目如上(线段树???),蒟蒻第二眼想法(其实这道题正解是单队的说,但蒟蒻刚学线段树,于是...就) 献上黑历史: RE是因为蒟蒻数组开太小:第一次开110000:第二次开200000:结果就………… ...
- BZOJ 1012--[JSOI2008]最大数maxnumber(二分&单调栈)
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 14142 Solved: 6049[Subm ...
- Luogu P1198 BZOJ 1012 最大数 (线段树)
手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/article/details/77449455 URL: (Lu ...
- BZOJ 1012 最大数
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- HYSBZ 1012 最大数maxnumber
思路:在单调队列不更新列首.由于查询区间大小不确定,所以不能保证下次是否还用到它 #include <cstdio> #include <cstring> #include & ...
- 【BZOJ】【1012】【JSOI2008】最大数maxnumber
线段树 ……现在再来看这题感觉好水啊,当年的大老虎现在也变成小花猫了,真是令人感动<_< /************************************************ ...
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 10374 Solved: 4535[Subm ...
随机推荐
- Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...
- image.xx.com 通过haproxy 跳转到内部图片服务器
<pre name="code" class="html">http://www.hyyche.com/#main C:\Users\Adminis ...
- 历峰集团3.43亿美元收购Net-a-Porter剩余股权_财经_腾讯网
历峰集团3.43亿美元收购Net-a-Porter剩余股权_财经_腾讯网 历峰集团3.43亿美元收购Net-a-Porter剩余股权
- python-大话装饰器
装饰器 装饰器是个什么玩意呢?是个会了不难,装逼神器.但是如果不了解理解起来还是很抽象,让我们试试这个装逼神器吧! 1.什么是装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典 ...
- iOS 更改导航栏返回button文字
假如有两个ViewController A,B 改动B的返回button需在A页面设置 self.navigationItem.backBarButtonItem = [[UIBarButtonIte ...
- C++ 文件操作实例
图1 文件个数及名称 图2 文件内容 背景:如图1所示,现有9个要处理的文件,每个文件的内容格式如图2所示,仅仅只是数值部分不同. 问题:如何提取每个文件中的相同属性的数值到同一个文件中? 输出示例: ...
- js简繁转换,两种实现方式,妥妥的~
不知道繁简按钮有什么卵用,大陆人自带繁简转换开关的好么,但是还是项目要求,做了这么一个功能,现在整理给大家用~完美兼容~么么哒 按钮的样式可以随便用css定义,注意id不要变,注意jq的事件绑定好就o ...
- matlab最小二乘法数据拟合函数详解
定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...
- textContent和innerHtml
textContent,innerText, 查询或者设置元素的文本内容. textContent如,html: <p>test gogo</p> javascript中: v ...
- static_cast,const_cast,dynamic_cast,reinterpret_cast
除非必要,尽量不要对变量进行强制转换.这是因为强制转换是存在风险的,但实际上在某种情况下,转型是必需的. 旧式C转型方式为(type)expression,即由一对小括号加上一个对象名称组成,而这种语 ...