题意:

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【线段树】的更多相关文章

  1. BZOJ 1012 线段树||单调队列

    非常裸的线段树  || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...

  2. BZOJ 1798 (线段树||分块)的标记合并

    我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...

  3. bzoj 3999 线段树区间提取 有序链剖

    看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...

  4. bzoj 3211 线段树

    开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...

  5. bzoj 1018 线段树维护连通性

    本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...

  6. bzoj 3212 线段树

    裸的线段树 /************************************************************** Problem: User: BLADEVIL Langua ...

  7. bzoj 2120 线段树套平衡树

    先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...

  8. bzoj 1901 线段树套平衡树+二分答案查询

    我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...

  9. BZOJ 3681 线段树合并+网络流

    思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...

  10. BZOJ 4756 线段树合并(线段树)

    思路: 1.最裸的线段树合并 2. 我们可以观察到子树求一个东西 那我们直接DFS序好了 入队的时候统计一下有多少比他大的 出的时候统计一下 减一下 搞定~ 线段树合并代码: //By SiriusR ...

随机推荐

  1. CentOS安装wireshark

    yum install wireshark-gnome yum install libpcap

  2. SetOperations

    无序集合,add的顺序不是存储顺序 1.add(K key, V value) 2.difference(K key, otherK[s]) :差集,返回Set 3.differenceAndStor ...

  3. node.js抓取网上图片保存到本地

    用到两个模块,http和fs var http = require("http");var fs = require("fs"); var server = h ...

  4. BEC listen and translation exercise 44

    But over the past 70 years or so, there's been a massive increase in one type of crime which was wha ...

  5. 关于MFC消息的总结

    一.MFC的消息类型 MFC的消息类型大致可以分为三种: 1.命令消息.由菜单和工具栏或快捷键产生,以WM_COMMAND形式发出(以WM_COMMAND发出的还有很多控件,如Button等,但它们产 ...

  6. python字符串相关操作

    字符串搜索相关搜索指定字符串,没有返回-1:str.find('t')指定起始位置搜索:str.find('t',start)指定起始及结束位置搜索:str.find('t',start,end)从右 ...

  7. python 3 serial module install

    /************************************************************************* * python 3 serial module ...

  8. python【事物 】【数据库锁】

    1.数据库事物 1. 什么是事务  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一 ...

  9. POJ 2017 No Brainer(超级水题)

    一.Description Zombies love to eat brains. Yum. Input The first line contains a single integer n indi ...

  10. netty中的Channel、ChannelPipeline

    一.Channel与ChannelPipeline关系 每一个新创建的 Channel 都将会被分配一个新的 ChannelPipeline.这项关联是永久性 的:Channel 既不能附加另外一个 ...