1012: [JSOI2008]最大数maxnumber

Time Limit: 3 Sec  Memory Limit: 162 MB
Submit: 8748  Solved: 3835
[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

5 100
A 96
Q 1
A 97
Q 1
Q 2

Sample Output

96
93
96

[ 2016-11-15]
按2e5建树,单点修改+区间最大值
一开始愚蠢的n+MOD防止n为负反而溢出了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define m ((l+r)>>1)
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define lc o<<1
#define rc o<<1|1
using namespace std;
typedef long long ll;
const int N=2e5+5,INF=2e9+5;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,nn,MOD;
char c[2]; int x;
int t[N<<2];
void build(int o,int l,int r){if(l==r) t[o]=-INF;else{build(lson);build(rson);}
}
void change(int o,int l,int r,int p,int v){if(l==r) t[o]=v;else{if(p<=m) change(lson,p,v);if(m<p) change(rson,p,v);t[o]=max(t[lc],t[rc]);}
}
int query(int o,int l,int r,int ql,int qr){if(ql<=l&&r<=qr) return t[o];else{int mx=-INF;if(ql<=m) mx=max(mx,query(lson,ql,qr));if(m<qr) mx=max(mx,query(rson,ql,qr)); return mx;}
}
int main(){n=read();MOD=read();nn=2e5;build(1,1,nn);int last=0,len=0;for(int i=1;i<=n;i++){scanf("%s",c); x=read();if(c[0]=='Q'){last=query(1,1,nn,len-x+1,len);printf("%d\n",last);}else{x=(x+last)%MOD;len++;change(1,1,nn,len,x);}}
}

[2017-01-06]

还可以用单调栈+二分找栈中第一个>=p-L+1的元素

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=2e5+5,INF=2e9+5;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int Q,MOD;
char s[3];
int st[N],top,x,t,L,a[N],p;
int main(){//freopen("in.txt","r",stdin);Q=read();MOD=read();while(Q--){scanf("%s",s);  if(s[0]=='A'){x=read();x=(x+t)%MOD;a[++p]=x;while(top&&a[st[top]]<=x) top--;st[++top]=p;}else{L=read();int pos=lower_bound(st+1,st+1+top,p-L+1)-st;t=a[st[pos]];printf("%d\n",t);}}
}

BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]相关推荐

  1. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值

    这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...

  2. BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

    裸的线段树...因为数组开小了而一直RE..浪费了好多时间.. -------------------------------------------------------------------- ...

  3. 1012: [JSOI2008]最大数maxnumber 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数 ...

  4. BZOJ1012|JSOI最大数maxnumber|线段树

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

  5. 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber

    一眼看题目吓了一跳:这TM不就是单调队列吗,200000又怎样,大不了我二分嘛 系统提示:成功开启 手残模式 开始瞎写: 1 #include <cstdio> 2 long long a ...

  6. CF407 E. k-d-sequence(线段树+单调栈)

    文章目录 CF407 E. k-d-sequence problem solution code CF407 E. k-d-sequence problem solution special case ...

  7. [Codeforces1132G]Greedy Subsequences——线段树+单调栈

    题目链接: Codeforces1132G 题目大意:给定一个序列$a$,定义它的最长贪心严格上升子序列为$b$满足若$a_{i}$在$b$中则$a_{i}$之后第一个比它大的也在$b$中.给出一个数 ...

  8. [线段树][单调栈] BZOJ 4527 CF 407E: K-D-Sequence

    SolutionSolution 可以把同余的串一起考虑,然后把所有数除以dd.变成公差为11的情况. 满足这样的条件 MAXL≤i≤RAi−MINL≤i≤RAi−R≤k−L MAX_{L\le i\ ...

  9. bzoj1012: [JSOI2008]最大数maxnumber [单调队列]

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

  10. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 4750  Solved: 2145 [Sub ...

最新文章

  1. win10子系统ubuntu文件夹位置_win10子系统(WSL)自定义安装路径
  2. java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
  3. 林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠
  4. 奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用
  5. sql server 分页
  6. 服务器oracle优化,oracle服务器配置及优化
  7. Linux 下如何查找木马并处理
  8. 10以内逆向运算题_Z3在逆向中运用
  9. SQL 个版本下载地址
  10. 插入图像标签(HTML)
  11. Rust导出Python/Node.js可用的DLL库
  12. 从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
  13. 马尔科夫模型与隐马尔科夫模型
  14. Python Apex YOLO V5 6.2 目标检测 全过程记录
  15. Linux 上格式化ssd硬盘方法
  16. [HDOJ4699]Editor
  17. 基于深度神经网络的股票多因子预测模型
  18. 游戏的革命:手机定位游戏
  19. GIS+=地理信息+行业+大数据——纽约公开11亿条出租车和Uber原始数据下载及分析
  20. 语音信号处理-概念(一):时域信号(横轴:时间;纵轴:幅值)、频谱图(横轴:频率;纵轴:幅值)--傅里叶变换-->时频谱图(语谱图/声谱图)【横轴:时间;纵轴:频率;颜色深浅:幅值】

热门文章

  1. Android studio jni
  2. ECMall插件——余额支付
  3. (转)GridView固定表头
  4. 递归与二叉树_leetcode235
  5. windows下测试flask的例子tuorial报错flask KeyError: 'DATABASE'
  6. 移动端拖拽(模块化开发,触摸事件,webpack)
  7. bzoj 1009: [HNOI2008]GT考试
  8. Jquery 根据value值设置下拉列表(select)默认选中项
  9. PeekMessage和GetMessage的区别
  10. 【译】Objectively Speaking 2: A Crash Course in Objective-C for iOS 6