题目链接

吉司机线段树裸题...

 #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 (吉司机线段树)的更多相关文章

  1. BZOJ4355: Play with sequence(吉司机线段树)

    题意 题目链接 Sol 传说中的吉司机线段树??感觉和BZOJ冒险那题差不多,就是强行剪枝... 这题最坑的地方在于对于操作1,$C >= 0$, 操作2中需要对0取max,$a[i] > ...

  2. bzoj4355 Play with sequence(吉司机线段树)题解

    题意: 已知\(n\)个数字,进行以下操作: \(1.\)区间\([L,R]\) 赋值为\(x\) \(2.\)区间\([L,R]\) 赋值为\(max(a[i] + x, 0)\) \(3.\)区间 ...

  3. UVALive - 4108 SKYLINE (吉司机线段树)

    题目链接 题意:在一条直线上依次建造n座建筑物,每座建筑物建造完成后询问它在多长的部分是最高的. 比较好想的方法是用线段树分别维护每个区间的最小值mi和最大值mx,当建造一座高度为x的建筑物时,若mi ...

  4. bzoj5312 冒险(吉司机线段树)题解

    题意: 已知\(n\)个数字,进行以下操作: \(1.\)区间\([L,R]\) 按位与\(x\) \(2.\)区间\([L,R]\) 按位或\(x\) \(3.\)区间\([L,R]\) 询问最大值 ...

  5. bzoj4695 最假女选手(势能线段树/吉司机线段树)题解

    题意: 已知\(n\)个数字,进行以下操作: \(1.\)给一个区间\([L,R]\) 加上一个数\(x\) \(2.\)把一个区间\([L,R]\) 里小于\(x\) 的数变成\(x\) \(3.\ ...

  6. HDU 5306 Gorgeous Sequence[线段树区间最值操作]

    Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  7. HDU - 6315 吉司机线段树

    题意:给出a,b数组,区间上两种操作,给\(a[L,R]\)+1s,或者求\(\sum_{i=l}^{r}a_i/b_i\) 一看就知道是吉司机乱搞型线段树(低配版),暴力剪枝就好 维护区间a的最大值 ...

  8. 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 ...

  9. [HDU] 5306 Gorgeous Sequence [区间取min&求和&求max]

    题解: 线段树维护区间取min求和求max 维护最小值以及个数,次小值 标记清除时,分情况讨论 当lazy>max1 退出 当max1>lazy>max2(注意不要有等号) 更新 否 ...

随机推荐

  1. apache——(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: make_sock: could not bind to address [::]:443

    问题:命令行运行httpd.exe时报错 (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次.  : AH00072: make_sock: could not bind t ...

  2. 独家git clone 加速方法

    git clone 独家方法 最近需要下载网上很多github库,所以git clone 4kb/s 的速度可以把人逼疯,为了加速git clone才有了这篇博客 网上有很多加速的方案 比如 blog ...

  3. sscanf输入总结

    2017-08-21 15:09:47 writer:pprp sscanf很好用的,一般配合gets()来使用 /* theme: usage of sscanf writer:pprp date: ...

  4. SpringMvc 笔记

    整理出来是 SpringMvc 笔记 方便以后查询 框架太多了 不经常使用 忘记的可能性很大 自己整理一套笔记 一看就明白了 1 对比 原始请求响应流程 1 发送请求 --> 2 控制层 --& ...

  5. 02_zookeeper集群安装

    zookeeper集群安装 (1)   下载zookeeper安装包,并上传到要组成zookeeper集群的多个机器上 我放置的目录:/usr/local/src/zookeeper-3.4.5.ta ...

  6. C# Page基础功能,用于各页面继承

    IBasePage.cs文件 /// <summary> /// 用于页面或用户控件 /// </summary> public interface IBasePage { / ...

  7. 通过ajax提交到url路由

    $regBoxform.find('button').on('click', function(){ /*通过ajax提交请求*/ $.ajax({ type:'post', /*用post 方式提交 ...

  8. virtual dom & mvvm

    虚拟dom 用js对象来表示dom树的结构,然后用这个对象来构建一个真正的dom树插入文档中: 当状态有变时,重新构造一个新的对象树,然后比较新的和旧的树,记录两个数的差异: 把差异部分应用到真正的d ...

  9. 我的Android学习路线(二)

    这两天的主要工作: 优化了一下布局界面,原本使用的是相对布局,直观省力,但是考虑了一下还是使用更加主流的线性布局. 完善了一下计算器的功能,比如加入小数运算. 使用线性布局的思路可以用下面的伪代码表示 ...

  10. 树 & 二叉树

    2018-01-04 19:13:46 一.树 在计算机科学中,树(英语:tree)是一种数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系的集合.把 ...