洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198
要问区间最大值,肯定是要用线段树的,不能用树状数组。(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊。不行!插入新元素之后更新的复杂度太高了!)
所以我们就弄一个初始元素是负数的最大值线段树,每次插入就是把末尾的元素 $update$ ,查询就是查询末尾的区间最大值,这样每次修改/查询的复杂度是 $O(nlogn)$ 的,非常给力。
所以说我又要到哪里抄一个线段树模板。
注意这个线段树是从1开始计数的。
#include<bits/stdc++.h> using namespace std; #define ll long longconst int MAXM=200000; int a[MAXM+5],st[(MAXM<<2)+5];void build(int o,int l,int r){if(l==r) st[o]=a[l];else{int m=l+((r-l)>>1);build(o<<1,l,m);build(o<<1|1,m+1,r);st[o]=max(st[o<<1],st[o<<1|1]);} }void update(int o,int l,int r,int id,int v){if(l==r) st[o]=v;else{int m=l+((r-l)>>1);if(id<=m) update(o<<1,l,m,id,v);else update(o<<1|1,m+1,r,id,v);st[o]=max(st[o<<1],st[o<<1|1]);} }int query(int o,int l,int r,int a,int b){if(r<a||l>b) return -1;if(a<=l&&r<=b) return st[o];int m=l+((r-l)>>1);int p1=query(o<<1,l,m,a,b),p2=query(o<<1|1,m+1,r,a,b);return max(p1,p2); }int M; ll D; int t;char s[5]; int ins;int cntA=0;int main(){t=0;scanf("%d%lld",&M,&D);for(int i=1;i<=M;i++){a[i]=-1;}build(1,1,M);for(int i=1;i<=M;i++){scanf("%s%d",s,&ins);if(s[0]=='Q'){t=query(1,1,M,cntA-ins+1,cntA);printf("%d\n",t);}else{update(1,1,M,cntA+1,((1ll*ins)+t)%D);cntA++;}} }
转载于:https://www.cnblogs.com/Yinku/p/10318840.html
洛谷 - P1198 - 最大数 - 线段树相关推荐
- 洛谷 p3372 模板-线段树 1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...
- 洛谷 [P1198] 最大数
首先这是一道线段树裸题,但是线段树长度不确定,那么我们可以在建树的时候,将每一个节点初始化为-INF,每次往队尾加一个元素即一次单节点更新,注意本题的数据范围,其实并不用开 long long,具体请 ...
- 【洛谷 3372】线段树 1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...
- 洛谷P3352 [ZJOI2016]线段树
P3352 [ZJOI2016]线段树 (^ w ^) 题目描述 小Yuuka遇到了一个题目:有一个序列a_1,a_2,?,a_n,q次操作,每次把一个区间内的数改成区间内的最大值,问最后每个数是多少 ...
- 【洛谷】【线段树】P3353 在你窗外闪耀的星星
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...
- Luogu P1198 BZOJ 1012 最大数 (线段树)
Luogu P1198 BZOJ 1012 最大数 (线段树) 手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/a ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- Luogu P1198 [JSOI2008]最大数 线段树
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- 洛谷P4114 Qtree1(树链剖分+线段树)
传送门 LCT秒天秒地用什么树剖 这题可以算是树剖的比较裸的题目了 把每一条边的权值下放到他两边的点中深度较深的那个 然后直接用树剖+线段树带进去乱搞就可以了 1 //minamoto 2 #incl ...
最新文章
- 【Zookeeper】源码分析之服务器(一)
- 进BAT一线大厂,前端工程师如何做准备?
- (五)为边缘AI人脸识别创建人脸数据库
- 杭电 1060 Leftmost Digit
- 第八节:SpringBoot指定配置文件配置三
- 20169217 2016-2017-2 《网络攻防实践》第四周学习总结
- 雨后小故事动态邪恶_当您遇到“邪恶”的问题时,使故事变小
- U8存货核算月末结账的月份跟日期对不上,导致无法结账
- Font Replacer
- 上岸快手,我选择一条不一样的路
- SpringBoot之整合Redis分析和实现-基于Spring Boot2.0.2版本
- cocos编写农场偷菜小游戏的总结
- 读取excel,int 数字时间转时间
- linux hba查看,各操作系统查看HBA和WWN的方法
- 欧姆龙NJ/NXPLC 全ST程序案例
- C语言实战:C语言打印九九乘法表
- 孙子兵法谋攻篇----知胜有五
- Automatic Noise Modeling for Ghost-free HDR Reconstruction 阅读笔记
- html函数参数数组遍历,JavaScript foreach遍历数组
- image not recognized
热门文章
- HTML5 Canvas 旋转
- 各版本windows操作系统获取地址,sqlserver全版本数据库工具下载网站分享
- PS 技术篇-使用ps快速完成证件照片换背景色实例演示10s搞定!
- Word 技术篇-段落的前后间距单位磅改为行,行改为磅
- freeRtos学习笔记 (5)事件组
- 【双系统下给ubuntu18.04扩容】
- [YTU]_2441( C++习题 复数类--重载运算符2+)
- c++派生类和基类的构造函数和析构函数
- 聚类之isodata算法
- matlab apfc,APFC-Boost 带APFC的Boost升压变换器在Matlab中的仿真实现 - 下载 - 搜珍网...