LG P4146 序列终结者
\(\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 序列终结者的更多相关文章
- 【FHQ-Treap】P4146 序列终结者
题意: 给定一个序列,支持区间加,区间反转,区间max询问 裸的平衡树题,这里采用FHQ-Treap 每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手) 打完这 ...
- luogu P4146 序列终结者
嘟嘟嘟 这是一道splay基础题. 最坑的一点是,因为有些节点可能没有左儿子或右儿子,所以必须把t[0].Max赋成-INF! 因为这个调了半天,看来回头复习复习splay是对的-- #include ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- [BZOJ1251]序列终结者
[BZOJ1251]序列终结者 试题描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题 ...
- 【BZOJ1251】序列终结者 Splay
一道模板题,一直没发现自己的快速读入读不了负数,我竟然能活到现在真是万幸. #include <iostream> #include <cstdio> #define inf ...
- BZOJ 1251: 序列终结者
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3773 Solved: 1579 [Submit][Status][Dis ...
- BZOJ 1251 序列终结者(Splay)
题目大意 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...
- 【BZOJ】1251: 序列终结者(splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1251 不行..为什么写个splay老是犯逗,这次又是null的mx没有赋值-maxlongint.. ...
- C++之路进阶——codevs4655(序列终结者)
4655 序列终结者 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 网上有许多题,就是给定一个序列,要你支持几 ...
- 【BZOJ1251】序列终结者
Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...
随机推荐
- 5 STL-string
重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍S ...
- 记录一次PyQt5内存泄漏的问题解决
前言 前几天利用python-mpv写了一个播放器,但是跑着跑着发现内存越来越大,经过我反复调试终于解决了这个问题. 解决思路 模块定位 首先我是一个模块一个模块测试的,这样可以尽快缩减出问题的代码范 ...
- 论文翻译:2022_DNS_1th:Multi-scale temporal frequency convolutional network with axial attention for speech enhancement
论文地址:带轴向注意的多尺度时域频率卷积网络语音增强 论文代码:https://github.com/echocatzh/MTFAA-Net 引用:Zhang G, Yu L, Wang C, et ...
- 痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码). 痞子衡之前写过一篇文章 <J-Flash在Micron ...
- 说说真实Java项目的开发流程,以及面试前的项目准备说辞
介绍项目是必不可少的Java面试环节,求职者需要借此证明自己真实Java项目的经验,如果再做的好的话,需要借此展开自己的亮点说辞. 不过之前如果只有学习项目经验,比如是自己跑通一个项目,或者是在培训班 ...
- 填坑日志-云网络智慧课堂双网卡Mac地址读取错误的问题及解决
云网络智慧课堂的双网卡问题记录及解决方案 教师端 其实这里双网卡的问题一直没有解决,分为了两部分,一部分是教师端,一部分是学生端.症状类似,问题也类似,都是在设计之初因为硬件限制可能没有考虑到双网卡的 ...
- 更改jenkins的工作目录
1.原始工作空间 2.目的盘符 3.任务管理器,找到Jenkins邮件转到详细信息 4.找到jenkins.exe打开文件所在位置 5.找到jenkins.xml打开 6.修改value值 改前: 改 ...
- Jmeter 定时器之同步定时器(Synchronizing Timer)
性能测试中需要模拟多用户并发测试,此时需要用到同步定时器(Synchronizing Timer).如下图,模拟用户组的数量设置20,相当于20个用户(线程)并发 名词解释: 名称:定时器名称,可根据 ...
- JavaScript:代码应该编写在哪里?
我们可以将JS的代码,编写在三个地方. 但是无论编写在哪里,最后它都会嵌入进网页代码中,被浏览器执行. 编写在script标签中 我们可以直接在HTML的script标签中,编写大段JS代码. 编写在 ...
- [OpenCV实战]17 基于卷积神经网络的OpenCV图像着色
目录 1 彩色图像着色 1.1 定义着色问题 1.2 CNN彩色化结构 1.3 从 中恢复彩色图像 1.4 具有颜色再平衡的多项式损失函数 1.5 着色结果 2 OpenCV中实现着色 2.1 模型下 ...