洛谷P1198 [JSOI2008]最大数(线段树)
题目描述
现在请求你维护一个数列,要求提供以下两种操作:
1、 查询操作。
语法:Q L
功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。
限制:LLL不超过当前数列的长度。(L>0)(L > 0)(L>0)
2、 插入操作。
语法:A n
功能:将nnn加上ttt,其中ttt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0t=0),并将所得结果对一个固定的常数DDD取模,将所得答案插入到数列的末尾。
限制:nnn是整数(可能为负数)并且在长整范围内。
注意:初始时数列是空的,没有一个数。
输入格式
第一行两个整数,MMM和DDD,其中MMM表示操作的个数(M≤200,000)(M \le 200,000)(M≤200,000),DDD如上文中所述,满足(0<D<2,000,000,000)(0<D<2,000,000,000)(0<D<2,000,000,000)
接下来的MMM行,每行一个字符串,描述一个具体的操作。语法如上文所述。
输出格式
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
输入输出样例
5 100
A 96
Q 1
A 97
Q 1
Q 2
96
93
96 线段树裸题。有这么几个需要注意的地方:
1.要错误理解当前序列最右侧与整个线段树最右侧叶子节点的关系!事先建树时是按照最大规模建的,所以在不断加入点的过程中序列最右端对应的叶子节点实际上是在线段树的最左与最右边叶子节点之内的。
2.INF一定要足够大,0x3f3f3f3f3f3f3f3f可以保证不爆。
3.对于Q,A若用scanf读取最好是%s,不然的话处理换行符会比较啰嗦。
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
int M,D;
long long length=;
struct SegmentTree
{
int l;
int r;
long long val;
}t[];
void build(int k,int l,int r)
{
t[k].val=-INF;
t[k].l=l;
t[k].r=r;
if(l==r)
{
return;
}
int mid=(l+r)/;
build(*k,l,mid);
build(*k+,mid+,r);
}
long long query(int k,int l,int r,int x,int y)//k为当前节点编号,l为当前节点覆盖区间左端点,r为右端点,x是操作区间左端点,y为操作区间右端点
{
if(l>=x&&r<=y)return t[k].val;
int mid=(l+r)/;
long long ans=-INF; //赋值为负无穷
if(mid>=x)
{
ans=query(*k,l,mid,x,y);
}
if(y>mid)ans=max(ans,query(*k+,mid+,r,x,y));//线段树常见套路
return ans;
}
void add(int k,int l,int r,int y,int num)//num为操作数,其他类似
{
if(l==r)
{
t[k].val=num;
return;
}
int mid=(l+r)/;
if(y<=mid)add(*k,l,mid,y,num);//y代表了单点操作的点的位置。这个题y即为当前序列最右边的位置 。注意!!不要错误理解当前序列最右侧与整个线段树最右侧叶子节点的关系!事先建树时是按照最大规模建的,所以在不断加入点的过程中序列最右端对应的叶子节点实际上是在线段树的叶子节点之内的
else add(*k+,mid+,r,y,num);
t[k].val=max(t[*k].val,t[*k+].val);//不要忘记向上更新
}
int main()
{
cin>>M>>D;
long long last=;
build(,,);
while(M--)
{
char c[];
long long temp;
scanf("%s%lld",&c,&temp);
if(c[]=='A')
{
length++;
add(,,,length,(temp+last)%D);//
}
else if(c[]=='Q')
{
long long ans=query(,,,length-temp+,length);
last=ans;
printf("%lld\n",ans);
}
}
return ;
}
洛谷P1198 [JSOI2008]最大数(线段树)的更多相关文章
- 「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数
「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数 题面描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数, ...
- 洛谷 P1198 [JSOI2008]最大数
洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...
- 洛谷P1198 [JSOI2008]最大数(单点修改,区间查询)
洛谷P1198 [JSOI2008]最大数 简单的线段树单点问题. 问题:读入A和Q时,按照读入一个字符会MLE,换成读入字符串就可以了. #include<bits/stdc++.h> ...
- 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- 洛谷 P1198 [JSOI2008]最大数——单调栈/线段树
先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 ...
- 洛谷P1198 [JSOI2008]最大数(线段树/单调栈)
题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询 ...
- 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...
- BZOJ——1012: [JSOI2008]最大数maxnumber || 洛谷—— P1198 [JSOI2008]最大数
http://www.lydsy.com/JudgeOnline/problem.php?id=1012|| https://www.luogu.org/problem/show?pid=1198 T ...
随机推荐
- Atcoder Beginner Contest151D(迷宫问题求任意两点最短路径的最大值,BFS)
BFS可以求得最短路,DFS会找到从当前点到图中叶子结点的路径. #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using na ...
- app内区域截图利用html2Canvals保存到手机 截屏 (html2Canvas使用版本是:0.5.0-beta3。)
app内区域截图利用html2Canvals保存到手机 app内有时候需要区域内的截图保存dom为图像,我们可以使用html2Canvas将dom转换成base64图像字符串,然后再利用5+api保存 ...
- (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法
一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...
- CSS 绝对定位时,水平居中而不影响原文档中其它元素
div.absolutemiddle { position: absolute; left: 50%; transform: translate(-50%); /* 平移50%为自身尺寸的一半,实现水 ...
- 洛谷P1064 金明的预算方案(01背包)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...
- 基于Amoeba读写分离
Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...
- javac 编译引用外部指定jar包进行编译和执行编译后的class文件
1.libs新建文件夹存放依赖所有jar包 2.cmd 执行: 2.1 javac -encoding UTF-8 -classpath .;C:\Users\chenquan\IdeaProject ...
- 从 0 到 1:Apache APISIX 的 Apache 之路
2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,本次活动,邀请了来自Apache APISIX.又 ...
- Vulnhub_DC7 记录
基本步骤 经验 & 总结 对信息还是不敏感,其实也是因为对Drupal这个CMS并不熟悉,不知道哪些地方是默认的那些地方是作者修改,比如这个"DC7USER". 对Drup ...
- 关于报错:Warning: Cannot modify header information - headers already sent by (output started at
8月5日,第一个项目即将完成,测试时,发现登录功能会出现小问题:记住密码的时候会报错 Warning: Cannot modify header information - headers alrea ...