洛谷 [P1198] 最大数
首先这是一道线段树裸题,但是线段树长度不确定,那么我们可以在建树的时候,将每一个节点初始化为-INF,每次往队尾加一个元素即一次单节点更新,注意本题的数据范围,其实并不用开 long long,具体请看注释。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int MAXN=200005;
int read(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return rv*fh;
}
int MOD,m,t,ma[MAXN<<2],n;
void PushUp(int rt){
ma[rt]=max(ma[rt<<1],ma[rt<<1|1]);
}
void build(int l,int r,int rt){
if(l==r){
ma[rt]=-0x7fffffff;
return;
}
int mid=l+((r-l)>>1);
build(lson);
build(rson);
PushUp(rt);
}
void Update(int add,int loc,int l,int r,int rt){
if(r==loc&&l==loc){
ma[rt]=add;
return;
}
int mid=l+((r-l)>>1); //这样取平均数可以防溢出
if(loc<=mid) Update(add,loc,lson);
else Update(add,loc,rson);
PushUp(rt);
}
int query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R){
return ma[rt];
}
int mid=l+((r-l)>>1);
int q=-0x7fffffff;
if(L<=mid){
q=max(q,query(L,R,lson));
}
if(mid<R) q=max(q,query(L,R,rson));
return q;
}
int main(){
freopen("in.txt","r",stdin);
m=read();MOD=read();
build(1,m,1);
for(int i=1;i<=m;i++){
char c;
scanf(" %c ",&c);
int k=read();
if(c=='A'){
n++;
k=((long long)k+t)%MOD;//注意防止溢出
Update(k,n,1,m,1);
}else {
t=query(n-k+1,n,1,m,1);
printf("%d\n",t);
}
}
fclose(stdin);
return 0;
}
等等。。本题只要求在队尾加入元素,而且要求的是队尾几个元素的最小值,那么这道题就可以用单调栈+二分来做
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=200005;
int read(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return rv*fh;
}
int m,MOD,t,stack[MAXN],head,num[MAXN],cnt;
int main(){
freopen("in.txt","r",stdin);
m=read();MOD=read();
for(int i=1;i<=m;i++){
char c;
scanf(" %c ",&c);
int k=read();
if(c=='A'){
k=((long long)k+t)%MOD;
cnt++;
while(stack[head]<=k&&head) head--;
head++;
stack[head]=k;
num[head]=cnt;
}else {
int l=1,r=head,mid;
k=cnt-k+1;
while(l<=r){
mid=(l+r)>>1;
if(num[mid]<k){
l=mid+1;
}else {
r=mid-1;
}
}
t=stack[l];
printf("%d\n",t);
}
}
fclose(stdin);
return 0;
}
洛谷 [P1198] 最大数的更多相关文章
- 洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...
- 洛谷p1198 最大数
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; in ...
- 洛谷 P1198 [JSOI2008]最大数
洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...
- 洛谷P1198 [JSOI2008]最大数(单点修改,区间查询)
洛谷P1198 [JSOI2008]最大数 简单的线段树单点问题. 问题:读入A和Q时,按照读入一个字符会MLE,换成读入字符串就可以了. #include<bits/stdc++.h> ...
- 「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数
「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数 题面描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数, ...
- 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...
- 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?
其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...
随机推荐
- Spring框架学习笔记——各种异常、报错解决
一.部分标签无法使用 原因:没有util导入命名空间 解决方法:在bean配置文件头部引用命名空间 <?xml version="1.0" encoding="UT ...
- maven(01)--安装及其介绍
1:下载maven windows下载 2:将下载文件夹解压,然后放在一个安装目录(可任意选择),例如就放在D盘的根目录 然后在设置环境变量,新建一个环境变量,名称为M2_HOME,其设置值为mave ...
- java的运算符和表达式
)1.算数运算符:java中常用的算术运算符除了 +.-.*./之外,还有%(取余).++(自增).--(自减). )1.1%(取余):可适用于整数,char,浮点数的取余中.在取余中,如果进行运算的 ...
- thinkPHP中_initialize方法实例分析
子类的_initialize方法自动调用父类的_initialize方法. 而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct ...
- base64是啥原理
Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节可表 ...
- 织梦DedeCMS提示信息框的修改,修改ShowMsg方法函数
http://www.360doc.com/content/14/0408/13/16498929_367236469.shtml 织梦DedeCMS系统,处处都在用到提示信息,但是这个提示框,前台后 ...
- Angular CLI: 发布到 GitHub Pages
发布 Angular 应用的简单方式是使用 GitHub Pages. 首先需要创建一个 GitHub 账号,随后,为您的项目创建一个仓库.记下 GitHub 中的用户名和项目名称. 例如,我的 Gi ...
- 对[UIApplication sharedApplication]理解
[ sharedApplication]返回UIApplication * application = nil; +(UIApplication*) shareApplication{ if(appl ...
- IIS命令行管理工具使用
AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 一条命令批量添加应用程序 c:\Windows\System32\inetsrv>for /d ...
- Jasper之table报表
这段时间用Jasper画报表,讲真的Jasper IDE真的很难用,网上找很久都没找到用table画的配置方法,以下是直接操作源码画table的方法,不用IDE一样可以做出来(不过样式还是得借助IDE ...