Description

网上有许多题,就是给定一个序列,要你支持几种操作:A、B、C、D。一看另一道题,又是一个序列 要支持几种操作:D、C、B、A。尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量……这样 我也出一道题,我出这一道的目的是为了让大家以后做这种题目有一个“库”可以依靠,没有什么其他的意思。这道题目 就叫序列终结者吧。 【问题描述】 给定一个长度为N的序列,每个序列的元素是一个整数(废话)。要支持以下三种操作: 1. 将[L,R]这个区间内的所有数加上V。 2. 将[L,R]这个区间翻转,比如1 2 3 4变成4 3 2 1。 3. 求[L,R]这个区间中的最大值。 最开始所有元素都是0。

Input

第一行两个整数N,M。M为操作个数。 以下M行,每行最多四个整数,依次为K,L,R,V。K表示是第几种操作,如果不是第1种操作则K后面只有两个数。

Output

对于每个第3种操作,给出正确的回答。

Sample Input

4 4
1 1 3 2
1 2 4 -1
2 1 3
3 2 4

Sample Output

2
【数据范围】
N<=50000,M<=100000。

splay区间操作模板

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#define MAXN (1000000+10)
using namespace std;
int Father[MAXN];
int Son[MAXN][];
int Key[MAXN];
int Size[MAXN];
int Root,sz,n,m;
int Max[MAXN],Val[MAXN],Add[MAXN],Rev[MAXN];
using namespace std; inline int Get(int x)
{
return Son[Father[x]][]==x;
} inline void Update(int x)
{
Size[x]=Size[Son[x][]]+Size[Son[x][]]+;
Max[x]=max(Val[x],max(Max[Son[x][]],Max[Son[x][]]));
} inline void Pushdown(int x)
{
if (Add[x])
{
if (Son[x][])
{
Max[Son[x][]]+=Add[x];
Val[Son[x][]]+=Add[x];
Add[Son[x][]]+=Add[x];
}
if (Son[x][])
{
Max[Son[x][]]+=Add[x];
Val[Son[x][]]+=Add[x];
Add[Son[x][]]+=Add[x];
}
Add[x]=;
}
if (Rev[x])
{
Rev[x]=;
swap(Son[x][],Son[x][]);
Rev[Son[x][]]^=;
Rev[Son[x][]]^=;
}
} inline void Rotate(int x)
{
Pushdown(Father[x]);
Pushdown(x);
int wh=Get(x);
int fa=Father[x],fafa=Father[fa];
Son[fa][wh]=Son[x][wh^];
Father[fa]=x;
if (Son[fa][wh]) Father[Son[fa][wh]]=fa;
Son[x][wh^]=fa;
Father[x]=fafa;
if (fafa) Son[fafa][Son[fafa][]==fa]=x;
Update(fa);
Update(x);
} inline void Splay(int x,int tar)
{
for (int fa;(fa=Father[x])!=tar;Rotate(x))
if (Father[fa]!=tar)
Rotate(Get(fa)==Get(x)?fa:x);
if (!tar) Root=x;
} void Build(int l,int r,int fa)
{
if (l>r) return;
if (l==r)
{
Size[l]=;
Father[l]=fa;
Son[fa][l>fa]=l;
return;
}
int mid=(l+r)>>;
Build(l,mid-,mid);
Build(mid+,r,mid);
Father[mid]=fa;
Son[fa][mid>fa]=mid;
Update(mid);
} int Findx(int x)
{
int now=Root;
while ()
{
Pushdown(now);
if (Size[Son[now][]]>=x)
now=Son[now][];
else
{
x-=Size[Son[now][]];
if (x==)
{
Splay(now,);
return now;
}
x--;
now=Son[now][];
}
}
} inline int Split(int x,int y)
{
int xx=Findx(x),yy=Findx(y);
Splay(xx,);
Splay(yy,xx);
return Son[yy][];
} int main()
{
int p,l,r,x;
scanf("%d%d",&n,&m);
Build(,n+,);
Root=(n+)>>;
Max[]=-0x7fffffff;
for (int i=;i<=m;++i)
{
scanf("%d",&p);
if (p==)
{
scanf("%d%d%d",&l,&r,&x);
int node=Split(l,r+);
Val[node]+=x;
Max[node]+=x;
Add[node]+=x;
}
if (p==)
{
scanf("%d%d",&l,&r);
int node=Split(l,r+);
Rev[node]^=;
}
if (p==)
{
scanf("%d%d",&l,&r);
int node=Split(l,r+);
printf("%d\n",Max[node]);
}
}
}

1251. 序列终结者【平衡树-splay】的更多相关文章

  1. BZOJ 1251 序列终结者(Splay)

    题目大意 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...

  2. 【BZOJ】1251: 序列终结者(splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1251 不行..为什么写个splay老是犯逗,这次又是null的mx没有赋值-maxlongint.. ...

  3. bzoj 1251: 序列终结者 平衡树,fhqtreap

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1251 思路 好简单的模板题 不过还是wrong了好几发 叶子节点要注意下,不能使用 遇到就不 ...

  4. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  5. 「BZOJ1251」序列终结者 (splay 区间操作)

    题面: 1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5367  Solved: 2323[Submit][Status][D ...

  6. BZOJ 1251: 序列终结者

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3773  Solved: 1579 [Submit][Status][Dis ...

  7. BZOJ1251 序列终结者(Splay平衡树)(占位)

    网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量…… ...

  8. bzoj 1251序列终结者 splay 区间翻转,最值,区间更新

    序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4594  Solved: 1939[Submit][Status][Discuss] De ...

  9. bzoj1251 序列终结者(Splay Tree+懒惰标记)

    Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...

随机推荐

  1. 【基于初学者的SSH】struts2 的拦截器、令牌的简单应用及理解

    一:拦截器与过滤器类似,但是它们的区别也很大: 01):过滤器理论上可以过滤任意内容,比如HTML,servlet,jsp,图片路径 02):拦截器只可以拦截action. 二:拦截器的原理  act ...

  2. ajax请求下载Execl表

    Execl表是经常要用到的存放二位数据的表格,Java也可以直接操作Execl表,经常用到的方式就是jxl和poi. 在这次项目中,我用到的poi往Execl中写数据,刚开始设计的是前端发送一个aja ...

  3. 为什么说 LINQ 要胜过 SQL

    如果你还没有沉溺于 LINQ,就会想这有啥大惊小怪的.SQL 并没有坏掉,为什么还要对它进行修补呢? 为什么我们还需要另外一种查询语言呢? 流行的说法是 LINQ 同 C#(或者 VB)集成在了一起, ...

  4. 探讨ES6的import export default 和CommonJS的require module.exports

    今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...

  5. scss-!optional

    optional翻译成汉语具有"可选的"的意思.顾名思义,!optional标记前面的扩展不必须生成一个新的选择器.看一段SCSS代码片段: p{ color:red; @exte ...

  6. CSS响应式:根据分辨率加载不同CSS的几个方法,亲测可用

    有时候你需要把同一个页面在手机和pc同时打开,其中有一个办法就是判断不同分辨路加载不同的css 小编总结了几种分别加载css的方法: 1.比较复杂的使用js判断加载不同css (亲测可用) 但是这种方 ...

  7. css中的线及vertical-align

    行内元素格式化顺序: 相关概念:  leading(行间距):指填充在两行文字间的铅条,等于line-height 和 font-size之差,其中一半leading加到文字上方,另一半leading ...

  8. php_soap扩展应用

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  9. 让浏览器识别HTML5规范中的新标签

    IE8浏览器中还没有添加对HTML5新标签的支持,所以在IE8中无法直接展现HTML5新标签中的内容.庆幸的是IE8/IE7/IE6支持通过document.createElement方法产生的标签, ...

  10. idea appliction context not configured for this file

    File --> Project Structure