\(\text{Problem}\)

支持区间加区间翻转区间最大值

\(\text{Solution}\)

\(\text{FHQ-Treap}\) 两个标记加与翻转

然后维护区间最大值

\(\text{Code}\)

#include <cstdio>
#include <algorithm>
#include <ctime>
#define re register
using namespace std; const int N = 5e4 + 5;
int n, m, rt;
int ls[N], rs[N], mx[N], val[N], siz[N], tag1[N], tag2[N], rnd[N]; inline void read(int &x)
{
x = 0; int f = 1; char ch = getchar();
while (ch < '0' || ch > '9') f = (ch == '-' ? -1 : f), ch = getchar();
while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
x *= f;
} inline int new_node(int v)
{
static int size = 0;
val[++size] = v, mx[size] = v, siz[size] = 1, rnd[size] = rand(),
ls[size] = rs[size] = tag1[size] = tag2[size] = 0;
return size;
} inline void pushup(int p)
{
siz[p] = siz[ls[p]] + siz[rs[p]] + 1, mx[p] = val[p];
if (ls[p]) mx[p] = max(mx[p], mx[ls[p]]);
if (rs[p]) mx[p] = max(mx[p], mx[rs[p]]);
} inline void pushdown(int p)
{
if (!p) return;
if (tag1[p])
{
if (ls[p]) tag1[ls[p]] += tag1[p], mx[ls[p]] += tag1[p], val[ls[p]] += tag1[p];
if (rs[p]) tag1[rs[p]] += tag1[p], mx[rs[p]] += tag1[p], val[rs[p]] += tag1[p];
tag1[p] = 0;
}
if (tag2[p])
{
tag2[p] = 0, swap(ls[p], rs[p]);
if (ls[p]) tag2[ls[p]] ^= 1;
if (rs[p]) tag2[rs[p]] ^= 1;
}
} void split(int p, int k, int &x, int &y)
{
if (!p) return void(x = y = 0);
pushdown(p);
if (k <= siz[ls[p]]) y = p, split(ls[p], k, x, ls[y]);
else x = p, split(rs[p], k - siz[ls[p]] - 1, rs[x], y);
pushup(p);
} int merge(int x, int y)
{
if (!x || !y) return x | y;
pushdown(x), pushdown(y);
if (rnd[x] < rnd[y]){rs[x] = merge(rs[x], y), pushup(x); return x;}
ls[y] = merge(x, ls[y]), pushup(y); return y;
} int main()
{
srand((unsigned)time(NULL));
read(n), read(m);
for(re int i = 1; i <= n; i++) rt = merge(rt, new_node(0));
for(re int i = 1, op, l, r, ad, x, y, u, v; i <= m; i++)
{
read(op), read(l), read(r);
split(rt, r, x, y), split(x, l - 1, u, v);
if (op == 1) read(ad), tag1[v] += ad, mx[v] += ad, val[v] += ad;
else if (op == 2) tag2[v] ^= 1;
else printf("%d\n", mx[v]);
rt = merge(merge(u, v), y);
}
}

LG P4146 序列终结者的更多相关文章

  1. 【FHQ-Treap】P4146 序列终结者

    题意: 给定一个序列,支持区间加,区间反转,区间max询问 裸的平衡树题,这里采用FHQ-Treap 每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手) 打完这 ...

  2. luogu P4146 序列终结者

    嘟嘟嘟 这是一道splay基础题. 最坑的一点是,因为有些节点可能没有左儿子或右儿子,所以必须把t[0].Max赋成-INF! 因为这个调了半天,看来回头复习复习splay是对的-- #include ...

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

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

  4. [BZOJ1251]序列终结者

    [BZOJ1251]序列终结者 试题描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题 ...

  5. 【BZOJ1251】序列终结者 Splay

    一道模板题,一直没发现自己的快速读入读不了负数,我竟然能活到现在真是万幸. #include <iostream> #include <cstdio> #define inf ...

  6. BZOJ 1251: 序列终结者

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

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

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

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

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

  9. C++之路进阶——codevs4655(序列终结者)

    4655 序列终结者  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master      题目描述 Description 网上有许多题,就是给定一个序列,要你支持几 ...

  10. 【BZOJ1251】序列终结者

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

随机推荐

  1. java中的自动拆装箱

    一:是什么 java的自动拆装箱,是从jdk1.5之后被引入的,java中的类型分为基本类型和引用类型,而自动拆装箱,可以让基本类型和对应的包装类,无缝转换.先拿最基本的来看. public clas ...

  2. 关于python3格式化字符输出的问题

    前言 今天简答写了一个爬虫,利用 % 格式化输出总是有问题 第一种写法: url = 'https://yysygw.res.netease.com/pc/gw/20190826151318/data ...

  3. x=x+=x-=x-x;

    int x=10; x=x+=x-=x-x; // x=x+(x-(x-x)) System.out.println(x); 输出结果20

  4. 如何使用C#在Excel中插入分页符

    在日常办公中,我们经常会用到Excel文档来帮助我们整理数据.为了方便打印Excel工作表,我们可以在Excel中插入分页符.各种处理软件一般都会自动按照用户所设置页面的大小自动进行分页,以美化文档的 ...

  5. vba 正则表达式用法

    Sub Regexp_test(Sht As String, str As String)On Error Resume NextDim regx As ObjectDim arr, brr, mhS ...

  6. docker registry(私库)搭建,使用,WEB可视化管理部署

    Docker Registry 是Docker官方一个镜像,可以用来储存和分发Docker镜像.目前比较流行的两个镜像私库是Docker Registry ,HarBor 其中HarBor最合适企业级 ...

  7. python-docx操作word文档详解

    案例 官网地址: https://python-docx.readthedocs.io/en/latest/ pip install python-docx from docx import Docu ...

  8. css样式表,选择器,伪类选择器

    CSS定义 CSS:Cascading Style Sheet(层叠样式表) 选择器 { 属性名: 属性值; } CSS样式表 (1)三种样式表使用 ·1> 内联样式 <div style ...

  9. 靶机练习 - 温故知新 - Toppo(sudo 提权)

    重新做了一下以前做过的第一个靶机(https://www.cnblogs.com/sallyzhang/p/12792042.html),这个靶机主要是练习sudo提权,当时不会也没理解. 开启靶机, ...

  10. 【ASP.NET Core】按用户角色授权

    上次老周和大伙伴们分享了有关按用户Level授权的技巧,本文咱们聊聊以用户角色来授权的事. 按用户角色授权其实更好弄,毕竟这个功能是内部集成的,多数场景下我们不需要扩展,不用自己写处理代码.从功能语义 ...