Code:

#include<algorithm>
#include<cstdio>
#include<cstring>
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 2000000
#define lson (now<<1)
#define rson ((now<<1)|1)
using namespace std;
int n,q;
ll arr[maxn],mx[maxn<<2],se[maxn<<2],cnt[maxn<<2],sum[maxn<<2];
void pushup(int l,int r,int now) {
int mid=(l+r)>>1;
int ls=lson,rs=(r>mid)?rson:0;
sum[now]=sum[ls]+sum[rs];
if(mx[ls]>mx[rs]) mx[now]=mx[ls],cnt[now]=cnt[ls],se[now]=max(se[ls],mx[rs]);
if(mx[rs]>mx[ls]) mx[now]=mx[rs],cnt[now]=cnt[rs],se[now]=max(se[rs],mx[ls]);
if(mx[ls]==mx[rs]) mx[now]=mx[ls],cnt[now]=cnt[ls]+cnt[rs],se[now]=max(se[ls],se[rs]);
}
void mark(int now,ll v) {
if(v<mx[now]) sum[now]-=(mx[now]-v)*cnt[now], mx[now]=v;
}
void pushdown(int l,int r,int now) {
int mid=(l+r)>>1;
mark(lson,mx[now]);
if(r>mid) mark(rson,mx[now]);
}
void build(int l,int r,int now) {
if(l==r) {
mx[now]=arr[l],se[now]=-1,sum[now]=arr[l],cnt[now]=1;
return;
}
int mid=(l+r)>>1;
build(l,mid,lson);
if(r>mid) build(mid+1,r,rson);
pushup(l,r,now);
}
void change(int l,int r,int now,int L,int R,ll v) {
if(mx[now]<=v) return;
if(l>=L&&r<=R&&se[now]<v) {
mark(now,v);
return;
}
pushdown(l,r,now);
int mid=(l+r)>>1;
if(L<=mid) change(l,mid,lson,L,R,v);
if(R>mid) change(mid+1,r,rson,L,R,v);
pushup(l,r,now);
}
ll qmax(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) return mx[now];
pushdown(l,r,now);
int mid=(l+r)>>1;
ll re=-1;
if(L<=mid) re=max(re,qmax(l,mid,lson,L,R));
if(R>mid) re=max(re,qmax(mid+1,r,rson,L,R));
return re;
}
ll qsum(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) return sum[now];
pushdown(l,r,now);
int mid=(l+r)>>1;
ll re=0;
if(L<=mid) re+=qsum(l,mid,lson,L,R);
if(R>mid) re+=qsum(mid+1,r,rson,L,R);
return re;
}
void solve() {
scanf("%d%d",&n,&q);
for(int i=1;i<=n;++i) scanf("%lld",&arr[i]);
build(1,n,1);
while(q--) {
int opt,x,y;
ll t;
scanf("%d%d%d",&opt,&x,&y);
if(opt==0) scanf("%lld",&t),change(1,n,1,x,y,t);
if(opt==1) printf("%lld\n",qmax(1,n,1,x,y));
if(opt==2) printf("%lld\n",qsum(1,n,1,x,y));
}
}
int main() {
// setIO("input");
int T;
scanf("%d",&T);
mx[0]=se[0]=-1;
while(T--) solve();
return 0;
}

  

HDU - 5306 Gorgeous Sequence 线段树 + 均摊分析的更多相关文章

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

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

  2. 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...

  3. 【uoj#228】基础数据结构练习题 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有三种:区间加.区间开根.区间求和. $n,m,a_i\le 100000$ . 题解 线段树+均摊分析 对于原来的两个数 $a$ ...

  4. cf250D. The Child and Sequence(线段树 均摊复杂度)

    题意 题目链接 单点修改,区间mod,区间和 Sol 如果x > mod ,那么 x % mod < x / 2 证明: 即得易见平凡, 仿照上例显然, 留作习题答案略, 读者自证不难. ...

  5. HDOJ 5306 Gorgeous Sequence 线段树

    http://www.shuizilong.com/house/archives/hdu-5306-gorgeous-sequence/ Gorgeous Sequence Time Limit: 6 ...

  6. bzoj4127 Abs 树链剖分+线段树+均摊分析

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4127 题解 首先区间绝对值和可以转化为 \(2\) 倍的区间正数和 \(-\) 区间和.于是问 ...

  7. UOJ #228. 基础数据结构练习题 线段树 + 均摊分析 + 神题

    题目链接 一个数被开方 #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",st ...

  8. HDU - 5306 Gorgeous Sequence (吉司机线段树)

    题目链接 吉司机线段树裸题... #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3 ...

  9. HDU 6047 Maximum Sequence(线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

随机推荐

  1. 最全mysql笔记整理

    mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创 ...

  2. php读取excel文件并导入数据库(表头任意设定)

    最近收到一个很奇葩的需求,要求上传excel员工工资表,表格表头不固定,导入后字段名为表头的拼音,每月导入一次,当月重复导入则覆盖现有的当月表头,并且可以按照在界面上按照月份筛选显示,我写的代码主要包 ...

  3. TMS320F28335——SCI串口

    一.IO配置 以SCIA为例:使用的是GPIO35--SCITXDA    GPIOA36--SCIRXDA 使用寄存器: GPBPUD :设置上拉  GPIO32-GPIO63   对应位0 使能上 ...

  4. 四:JVM调优原理与常见异常处理方案

    在jvm调优之前,我们必须先了解jvm的内存模型与GC回收机制,这些在我前面的文章里面有介绍!接下来我们通过一个案例来调整jvm性能. 一测试案例: 1.1 编写demo import java.te ...

  5. Luogu P2756 [网络流24题]飞行员配对方案问题_二分图匹配题解

    二分图模板题 我用的是匈牙利 其实最大流也可以做 #include<iostream> #include<cstdio> #include<cstdlib> #in ...

  6. MFC- 网络编程

    一.MFC网络编程 a)CAsyncSocket用于异步非阻塞类,用UDP通信: b)CAsyncSocket的子类(派生类):Csocket同步阻塞类,用于TCP通信: c)通信前,必须调用AfxS ...

  7. Springboot 打jar包项目无法访问jsp问题解决方案

    maven编译插件,请选择1.4.2.RELEASE版本,1.5.x的版本已经不再支持 pom.xml重要部分如下: <build> <resources> <resou ...

  8. django基础篇01-环境的搭建和项目的创建

    本文参考自银角大王的博客 基本配置 常用命令: django-admin startproject xxx(项目名) python3 manage.py startapp xxx(app名) pyth ...

  9. Spring基础04——ApplicationContext

    1.ApplicationContext简述 ApplicationContext代表IOC容器,在SpringIOC容器中读取Bean配置创建Bean实例之前,必须对它进行实例化,只有在容器实例化后 ...

  10. 强化学习(Reinfment Learning) 简介

    本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...