BZOJ 1012【线段树】
题意:
Q L 询问数列最后 L 个数中最大的数。
A n 将 n + t ( t_init = 0 ), 然后插到最后去。
思路:
感觉动态地插入,很有问题。
数组地长度会时常变化,但是可以先预处理就是有2e5个结点(最多)。
然后就是插咯?
它保证query 的时候 L < n(当前数组的长度)
水题。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+20; LL mod;
struct Seg{
LL Max;
int Left,Right;
}q[N*4]; void Build(int num,int Left,int Right)
{
q[num].Left=Left;q[num].Right=Right;
if(Left==Right)
return;
int Mid=(Left+Right)>>1;
Build(num<<1,Left,Mid);
Build(num<<1|1,Mid+1,Right);
} void Update(int num,int k,LL w)
{
if(q[num].Left==q[num].Right&&q[num].Left==k){
q[num].Max=w;
return;
}
int Mid=(q[num].Left+q[num].Right)>>1;
if(Mid>=k)
Update(num<<1,k,w);
else
Update(num<<1|1,k,w);
q[num].Max=max(q[num<<1].Max,q[num<<1|1].Max);
} int query(int num,int Left,int Right)
{
if(q[num].Left>=Left && q[num].Right<=Right)
return q[num].Max;
int Mid=(q[num].Left+q[num].Right)>>1;
if(Mid>=Right)
return query(num<<1,Left,Right);
else if(Mid<Left)
return query(num<<1|1,Left,Right);
else
return max(query(num<<1,Left,Mid),query(num<<1|1,Mid+1,Right));
} int main()
{
char x[5];
int m;
int n=0,L;
LL k,t=0;
Build(1,1,200000);
scanf("%d%lld",&m,&mod);
while(m--)
{
scanf("%s",x);
if(x[0]=='A'){
scanf("%lld",&k);
k=(k+t)%mod;
n++;
Update(1,n,k);
}
else
{
scanf("%d",&L);
int s=n-L+1;
t=query(1,s,n);
printf("%lld\n",t);
}
}
return 0;
}
BZOJ 1012【线段树】的更多相关文章
- BZOJ 1012 线段树||单调队列
非常裸的线段树 || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...
- BZOJ 1798 (线段树||分块)的标记合并
我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...
- bzoj 3999 线段树区间提取 有序链剖
看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...
- bzoj 3211 线段树
开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...
- bzoj 1018 线段树维护连通性
本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...
- bzoj 3212 线段树
裸的线段树 /************************************************************** Problem: User: BLADEVIL Langua ...
- bzoj 2120 线段树套平衡树
先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...
- bzoj 1901 线段树套平衡树+二分答案查询
我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...
- BZOJ 3681 线段树合并+网络流
思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...
- BZOJ 4756 线段树合并(线段树)
思路: 1.最裸的线段树合并 2. 我们可以观察到子树求一个东西 那我们直接DFS序好了 入队的时候统计一下有多少比他大的 出的时候统计一下 减一下 搞定~ 线段树合并代码: //By SiriusR ...
随机推荐
- dos命令行中不同磁盘的调转
windows下,dos中不同磁盘的跳转: 直接 盘符+回车: 如跳转到d盘: D:回车即可 : Microsoft Windows [版本 10.0.10586] (c) 2015 Microsof ...
- define的用法与注意事项
------------------------------------------------- 在编程使用宏替换时,当字符串中不只一个符号时,加上括号表现出优先级, 如果是带参数的宏定义,则要给宏 ...
- html设置编码
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- Java_异常_06_ Unsupported major.minor version 52.0
二.参考资料 1.如何解决Unsupported major.minor version 52.0问题? 2.Unsupported major.minor version 52.0 3. Unsup ...
- php 数字小写转为大写的函数
PHP把阿拉伯数字转换成中文,需要定义一个转换的算法: <?php /将数字转换为汉字,比如1210转换为一千二百一十 $num = "842105580";//九位数 fu ...
- JSTL前台报错
报错信息: jsp页面报错 Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core&qu ...
- codeforces 651B B. Beautiful Paintings
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- windows下面的python的MySQLdb环境安装
什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. 如何安装MySQ ...
- 雅礼集训 2017 Day2 水箱 可并堆
题目描述 给出一个长度为 n 宽度为 1 ,高度无限的水箱,有 n−1 个挡板将其分为 n 个 1 - 1 的小格,然后向每个小格中注水,水如果超过挡板就会溢出到挡板的另一边,这里的水是满足物理定律 ...
- POJ1422 Air Raid 和 CH6902 Vani和Cl2捉迷藏
Air Raid Language:Default Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9547 A ...