先上一波题目 https://www.luogu.org/problem/P1198

题目要求维护后缀最大值 以及在数列的最后面添加一个数

这道题呢我们有两种做法

1.单调栈

因为只需要维护后缀最大值 而我们每次插入都是在最后面添加一个数 所以我们可以维护一个单调栈

栈底到栈顶逐渐增大 因为如果一个数他的位置在你的前面且他比你小 那么他便不会对前面位置的最大值产生影响 可以直接省略

我们在查询的时候只需要二分一下答案 找到比查询位置后的最接近查询位置的数的值就是答案了

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
long long read(){
long long ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
char c;
int stk[M],top=;
int n,cnt=;
long long mod,s[M],T=,x;
int main(){
n=read(); mod=read();
for(int i=;i<=n;i++){
c=getchar();
while(c!='Q'&&c!='A') c=getchar();
x=read();
if(c=='Q'){
x=cnt-x+;
long long l=,r=top;
while(l<r){
int mid=(l+r)>>;
if(stk[mid]>=x) r=mid;
else l=mid+;
}
T=s[r];
printf("%lld\n",T);
}
else{
cnt++;
x=(x+T)%mod;
x=(x+mod)%mod;
while(top&&s[top]<=x) top--;
s[++top]=x; stk[top]=cnt;
}
}
return ;
}

2.线段树

线段树就很明显了 设计的操作有单点插入 区间求最大值

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
long long read(){
long long ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
char c;
int n,cnt=;
long long mod,T=,now,s[M*];
void up(int x){s[x]=max(s[x<<],s[x<<^]);}
void insert(int x,int l,int r){
if(l==r){
s[x]=now;
return ;
}
int mid=(l+r)>>;
if(cnt<=mid) insert(x<<,l,mid);
else insert(x<<^,mid+,r);
up(x);
}
long long pmx(int x,int l,int r){
if(now<=l&&r<=cnt) return s[x];
int mid=(l+r)>>;
long long ans=-;
if(now<=mid) ans=max(ans,pmx(x<<,l,mid));
if(cnt>mid) ans=max(ans,pmx(x<<^,mid+,r));
return ans;
}
int main(){
n=read(); mod=read();
for(int i=;i<=n;i++){
c=getchar();
while(c!='Q'&&c!='A') c=getchar();
now=read();
if(c=='Q'){
now=cnt-now+;
T=pmx(,,n);
printf("%lld\n",T);
}
else{
cnt++;
now=(now+T)%mod;
insert(,,n);
}
}
return ;
}

洛谷 P1198 [JSOI2008]最大数——单调栈/线段树的更多相关文章

  1. 洛谷P4198 楼房重建 单调栈+线段树

    正解:单调栈+线段树 解题报告: 传送门! 首先考虑不修改的话就是个单调栈板子题昂,这个就是 然后这题的话,,,我怎么记得之前考试好像有次考到了类似的题目昂,,,?反正我总觉着这方法似曾相识的样子,, ...

  2. 洛谷P1198 [JSOI2008]最大数(单点修改,区间查询)

    洛谷P1198 [JSOI2008]最大数 简单的线段树单点问题. 问题:读入A和Q时,按照读入一个字符会MLE,换成读入字符串就可以了. #include<bits/stdc++.h> ...

  3. 「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数

    「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数 题面描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数, ...

  4. 洛谷 P1198 [JSOI2008]最大数

    洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...

  5. 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)

    洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...

  6. 洛谷P1198 [JSOI2008]最大数

    P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...

  7. 洛谷P1198 [JSOI2008]最大数(线段树/单调栈)

    题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询 ...

  8. 洛谷P1198 [JSOI2008]最大数(线段树)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L> ...

  9. 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )

    To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...

随机推荐

  1. 【读书笔记】:MIT线性代数(1):Linear Combinations

    1. Linear Combination Two linear operations of vectors: Linear combination: 2.Geometric Explaination ...

  2. IIS 解决跨域问题

    打开 HTTP响应标头 添加如下三条 名称Access-Control-Allow-Origin  值*名称Access-Control-Allow-Headers  值Content-Type,Ac ...

  3. leetcode.排序.451根据字符出现频率排序-Java

    1. 具体题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r ...

  4. python序列基本操作

    这里讲一基本概念:容器---可以包含其他对象的对象:两种主要的容器是序列(列表和元祖)和映射(字典) 关于序列的通用基本操作:python中常用的序列主要有两种:列表和元祖  -------索引,切片 ...

  5. Codeforces Breaking Good

    Breaking Good time limit per test 2 seconds memory limit per test 256 megabytes Breaking Good is a n ...

  6. windows10 Bash on Ubuntu 安装pygame

    在bash命名行下执行以下三个命令1.下载pip2.apt-get install python3-setuptools3.python3 setup.py install以管理员身份运行cmd,执行 ...

  7. 【教程】linux安装nginx(详细)

    博主最近在安装Nginx,虽然之前安装过,但是没有记录安装过程,导致现在安装过程中遇到坑,现记录一下,希望能帮助到你. 1:安装编译工具及库文件 yum -y install make zlib zl ...

  8. gym/102253C Colorful Tree 树上计数

    题意:有一颗数,每个点有一个颜色,定义两点之间的距离为两点路径之间不同颜色的数目,问所有路径的距离和是多少? 思路:每个颜色的贡献为路径中有这个颜色的路径数.先假设所有路径都会经过一种颜色,再减去不会 ...

  9. Nginx有哪些作用?

    Nginx有哪些作用? http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡   什么是正向代理? 正向代理,意思是一个位于客户端和原始服务器(origin server)之 ...

  10. ReactNative 遇到的问题汇总

    1.react-native 启动项目出现如下报错 解决方法: nvm install v9.0.0 nvm alias default v9.0.0