HDU - 5306 Gorgeous Sequence (吉司机线段树)
吉司机线段树裸题...
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+,inf=0x3f3f3f3f3f3f3f3f;
ll n,m,a[N],mx[N<<],se[N<<],nmx[N<<],lz[N<<];
ll sum[N<<];
#define ls (u<<1)
#define rs (u<<1|1)
#define mid ((l+r)>>1)
void pu(ll u) {
sum[u]=sum[ls]+sum[rs];
mx[u]=max(mx[ls],mx[rs]),se[u]=min(mx[ls],mx[rs]);
se[u]=se[u]==mx[u]?max(se[ls],se[rs]):max(se[u],max(se[ls],se[rs]));
nmx[u]=(mx[ls]==mx[u]?nmx[ls]:)+(mx[rs]==mx[u]?nmx[rs]:);
}
void change(ll u,ll x) {sum[u]-=(mx[u]-x)*nmx[u],mx[u]=lz[u]=x;}
void pd(ll u) {
if(~lz[u]) {
if(mx[ls]>lz[u])change(ls,lz[u]);
if(mx[rs]>lz[u])change(rs,lz[u]);
lz[u]=-;
}
}
void upd(ll L,ll R,ll x,ll u=,ll l=,ll r=n) {
if(l>R||r<L||mx[u]<=x)return;
if(l>=L&&r<=R&&se[u]<x) {change(u,x); return;}
pd(u),upd(L,R,x,ls,l,mid),upd(L,R,x,rs,mid+,r),pu(u);
}
ll qrymx(ll L,ll R,ll u=,ll l=,ll r=n) {
if(l>R||r<L)return ~inf;
if(l>=L&&r<=R)return mx[u];
pd(u);
return max(qrymx(L,R,ls,l,mid),qrymx(L,R,rs,mid+,r));
}
ll qrysum(ll L,ll R,ll u=,ll l=,ll r=n) {
if(l>R||r<L)return ;
if(l>=L&&r<=R)return sum[u];
pd(u);
return qrysum(L,R,ls,l,mid)+qrysum(L,R,rs,mid+,r);
}
void build(ll u=,ll l=,ll r=n) {
lz[u]=-;
if(l==r) {sum[u]=mx[u]=a[l],se[u]=~inf,nmx[u]=; return;}
build(ls,l,mid),build(rs,mid+,r),pu(u);
}
int main() {
ll T;
for(scanf("%lld",&T); T--;) {
scanf("%lld%lld",&n,&m);
for(ll i=; i<=n; ++i)scanf("%lld",&a[i]);
build();
while(m--) {
ll f,l,r,x;
scanf("%lld%lld%lld",&f,&l,&r);
if(f==)scanf("%lld",&x),upd(l,r,x);
else if(f==)printf("%lld\n",qrymx(l,r));
else if(f==)printf("%lld\n",qrysum(l,r));
}
}
return ;
}
HDU - 5306 Gorgeous Sequence (吉司机线段树)的更多相关文章
- BZOJ4355: Play with sequence(吉司机线段树)
题意 题目链接 Sol 传说中的吉司机线段树??感觉和BZOJ冒险那题差不多,就是强行剪枝... 这题最坑的地方在于对于操作1,$C >= 0$, 操作2中需要对0取max,$a[i] > ...
- bzoj4355 Play with sequence(吉司机线段树)题解
题意: 已知\(n\)个数字,进行以下操作: \(1.\)区间\([L,R]\) 赋值为\(x\) \(2.\)区间\([L,R]\) 赋值为\(max(a[i] + x, 0)\) \(3.\)区间 ...
- UVALive - 4108 SKYLINE (吉司机线段树)
题目链接 题意:在一条直线上依次建造n座建筑物,每座建筑物建造完成后询问它在多长的部分是最高的. 比较好想的方法是用线段树分别维护每个区间的最小值mi和最大值mx,当建造一座高度为x的建筑物时,若mi ...
- bzoj5312 冒险(吉司机线段树)题解
题意: 已知\(n\)个数字,进行以下操作: \(1.\)区间\([L,R]\) 按位与\(x\) \(2.\)区间\([L,R]\) 按位或\(x\) \(3.\)区间\([L,R]\) 询问最大值 ...
- bzoj4695 最假女选手(势能线段树/吉司机线段树)题解
题意: 已知\(n\)个数字,进行以下操作: \(1.\)给一个区间\([L,R]\) 加上一个数\(x\) \(2.\)把一个区间\([L,R]\) 里小于\(x\) 的数变成\(x\) \(3.\ ...
- HDU 5306 Gorgeous Sequence[线段树区间最值操作]
Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU - 6315 吉司机线段树
题意:给出a,b数组,区间上两种操作,给\(a[L,R]\)+1s,或者求\(\sum_{i=l}^{r}a_i/b_i\) 一看就知道是吉司机乱搞型线段树(低配版),暴力剪枝就好 维护区间a的最大值 ...
- 2015 Multi-University Training Contest 2 hdu 5306 Gorgeous Sequence
Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- [HDU] 5306 Gorgeous Sequence [区间取min&求和&求max]
题解: 线段树维护区间取min求和求max 维护最小值以及个数,次小值 标记清除时,分情况讨论 当lazy>max1 退出 当max1>lazy>max2(注意不要有等号) 更新 否 ...
随机推荐
- 【分类】AlexNet论文总结
目录 0. 论文链接 1. 概述 2. 对数据集的处理 3. 网络模型 3.1 ReLU Nonlinearity 3.2 Training on multiple GPUs 3.3 Local Re ...
- Win10 initluictrl failed问题
问题描述 启动win10之后,所有的软件.快捷方式无法访问,双击之后没有响应但联网正常. 解决方法 win键+S弹出选项框,选择cmd(管理员). 键入命令:netsh winsock reset c ...
- ThinkPHP开发笔记-用户登录注册
1.修改模块配置,Application/当前模块名/Conf/config.php <?php return array( //数据库配置信息 'DB_TYPE' => 'mysql', ...
- Impala 技术点梳理
1.优点 1.1 快! 主节点生成执行计划树并分发执行计划至各节点并行执行的拉式获取数据(MR:推式获取数据) 计算的中间结果不写入磁盘 1.2 便利 提供SQL语义,可以方便的进行复杂的数据分析任 ...
- String写时拷贝实现
头文件部分 1 /* 版权信息:狼 文件名称:String.h 文件标识: 摘 要:对于上版本简易的String进行优化跟进. 改进 1.(将小块内存问题与大块分别对待)小内存块每个对象都有,当内存需 ...
- msys git 安装配置、git命令行使用
安装 .安装msys git客户端程序 .打开git bash,命令ssh-keygen –C “admin@test.cn “ –t rsa .复制C:\Users\felix\.ssh\id_rs ...
- Day34 设计模式
参考博客: http://www.cnblogs.com/alex3714/articles/5760582.html 什么是设计模式 Christopher Alexander:“每一个模式描述了一 ...
- Isolation Forest原理总结
Isolation Forest(以下简称iForest)算法是由南京大学的周志华和澳大利亚莫纳什大学的Fei Tony Liu, Kai Ming Ting等人共同提出,用于挖掘异常数据[Isola ...
- VirtualBox安装Ubuntu搭建js环境的注意事项
1.使用CPU-Z工具检查主板是否支持虚拟技术,因为VirtulBox虚拟机需要主板支持虚拟技术 2.Ubuntu安装之后重启会出现:please remove this install medium ...
- 【LeetCode 231_整数_位运算】Power of Two
bool isPowerOfTwo(int n) { && !(n & (n - )); }