BZOJ——1012: [JSOI2008]最大数maxnumber || 洛谷—— P1198 [JSOI2008]最大数
http://www.lydsy.com/JudgeOnline/problem.php?id=1012||
https://www.luogu.org/problem/show?pid=1198
Time Limit: 3 Sec Memory Limit: 162 MB
Submit: 10824 Solved: 4735
[Submit][Status][Discuss]
Description
现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L
个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加
上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取
模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个
数。
Input
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足D在longint内。接下来
M行,查询操作或者插入操作。
Output
对于每一个询问操作,输出一行。该行只有一个数,即序列中最后L个数的最大数。
Sample Input
A 96
Q 1
A 97
Q 1
Q 2
Sample Output
93
96
HINT
数据如下http://pan.baidu.com/s/1i4JxCH3
Source
①区间查询最值考虑线段树、
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; const int N();
int t,mod,n,x[N],ans;
char ch,s[N]; struct Tree
{
int l,r,sum;
}tr[N<<];
#define lc (now<<1)
#define rc (now<<1|1)
#define mid (tr[now].l+tr[now].r>>1)
inline void Tree_up(int now)
{
tr[now].sum=max(tr[lc].sum,tr[rc].sum);
}
void Tree_build(int now,int l,int r)
{
tr[now].l=l; tr[now].r=r;
if(l==r) return ;
Tree_build(lc,l,mid);
Tree_build(rc,mid+,r);
}
void Tree_change(int now,int to,int x)
{
if(tr[now].l==tr[now].r)
{
tr[now].sum=x;
return ;
}
if(to<=mid) Tree_change(lc,to,x);
else Tree_change(rc,to,x);
Tree_up(now);
}
int Tree_query(int now,int l,int r)
{
if(tr[now].l==l&&r==tr[now].r) return tr[now].sum;
if(r<=mid) return Tree_query(lc,l,r);
else if(l>mid) return Tree_query(rc,l,r);
else return max(Tree_query(lc,l,mid),Tree_query(rc,mid+,r));
} int main()
{
scanf("%d%d",&t,&mod);
for(int i=;i<=t;i++)
{
cin>>ch>>x[i]; s[i]=ch;
if(ch=='A') n++;
}
Tree_build(,,n);
int cnt=;
for(int i=;i<=t;i++)
{
if(s[i]=='A')
Tree_change(,++cnt,(ans+x[i])%mod);
else
{
ans=Tree_query(,cnt-x[i]+,cnt);
printf("%d\n",ans);
}
}
return ;
}
线段树AC
②单调递减栈,二分查找位于L处的值
#include <algorithm>
#include <cstdio> using namespace std; const int N();
int n,mod,ans,x;
int stack[N],top,num[N],len; int main()
{
scanf("%d%d",&n,&mod);
for(char ch[];n--;)
{
scanf("%s%d",ch,&x);
if(ch[]=='A')
{
x=(x+ans)%mod;
num[++len]=x;
for(;num[stack[top]]<=x&&stack[top]>&⊤) top--;
stack[++top]=len;
}
else
{
int l=,r=top;
for(int mid;l<=r;)
{
mid=l+r>>;
if(stack[mid]<len-x+) l=mid+;
else r=mid-,ans=num[stack[mid]];
}
printf("%d\n",ans);
}
}
return ;
}
单调栈AC
BZOJ——1012: [JSOI2008]最大数maxnumber || 洛谷—— P1198 [JSOI2008]最大数的更多相关文章
- 洛谷 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]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)
洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...
- 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...
- AC日记——最大数 洛谷 P1198 [JSOI2008]
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- 洛谷 P1198 [JSOI2008]最大数 Label:线段树
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- 洛谷 P1198 [JSOI2008]最大数——单调栈/线段树
先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 ...
随机推荐
- JavaScript中的Array对象方法调用
方法concat for 循环与for in 循环 <html> <head> <script type="text/javascript"> ...
- Linux 文件描写叙述符设置为非堵塞的方法
通过fcntl设置文件描写叙述符属性 fcntl即F_SETFL,F_GETFL的使用,设置文件的flags,堵塞设置成非堵塞,非堵塞设置成堵塞(这连个在server开发中能够封装为基本函数) 1.获 ...
- 本地搭建MongoDB Server
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/ Overview Requirements Get Mongo ...
- nyoj--1011--So Easy[II](数学几何水题)
So Easy[II] 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 这是一道基础的计算几何问题(其实这不提示大家也都看的出).问题描述如下: 给你一个N边形.且N边形 ...
- border:none与border:0的区别
border:none与border:0的区别体现为两点:一是理论上的性能差异,二是浏览器兼容性的差异. 性能差异: [border:0;]把border设为“0”像素效果等于border-width ...
- BZOJ 1379 模拟退火
模拟退火的第一题~ //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> u ...
- 关于vsphere的 许可证配置问题
exsi未获得许可情况: exsi的许可证: vcenter server 未获许可: vcenter server的许可证: 写在最后: 无所不能的中国人,百度一下 许可证 就什么多有了,佩服,佩 ...
- monad-本质解释- a monad is a design pattern--monad与泛型相关
monad的特征: 类型转化+添加新的操作. monad RACStream RACSignal RACSubject monad:单一体,(不可分的)个体 以计算为中心的封装. In functi ...
- error_reporting()函数
定义和用法 error_reporting() 函数跪地你给应该报告何种 PHP 错误. error_reporting() 函数能够在运行时设置 error_reporting 指令. PHP 有诸 ...
- yes---重复输出指定的字符串
yes命令在命令行中输出指定的字符串,直到yes进程被杀死.不带任何参数输入yes命令默认的字符串就是y. 语法 yes(参数) 参数 字符串:指定要重复打印的字符串. 实例 [root@localh ...