http://acm.hdu.edu.cn/showproblem.php?pid=6521

待填

代码

#include<bits/stdc++.h>
#define ls o<<1
#define rs o<<1|1
#define ll long long
using namespace std;
const int MAXN = 5e5+5;
int Mx[MAXN<<2],Mx2[MAXN<<2],Mn[MAXN<<2],ly[MAXN<<2];
ll V[MAXN<<2];
int n,m,l,r;
void push_up(int o){
Mx[o]=max(Mx[ls],Mx[rs]);
Mx2[o]=0;
if(Mx[ls]==Mx[rs]){
Mn[o]=Mn[ls]+Mn[rs];
Mx2[o]=max(Mx2[ls],Mx2[rs]);
}else{
if(Mx[ls]>Mx[rs]){
Mx[o]=Mx[ls];Mn[o]=Mn[ls];V[o]=V[ls];Mx2[o]=Mx2[ls];ly[o]=ly[ls];
}else{
Mx[o]=Mx[rs];Mn[o]=Mn[rs];V[o]=V[rs];Mx2[o]=Mx2[rs];ly[o]=ly[rs];
}
Mx2[o]=max(Mx2[ls],Mx2[rs]);
if(Mx[o]==Mx[ls])Mx2[o]=max(Mx2[o],Mx[rs]);
else Mx2[o]=max(Mx2[o],Mx[ls]);
}
V[o]=V[ls]+V[rs];
}
void ch(int o,int x){
V[o]-=(1ll*Mx[o]-x)*Mn[o];
Mx[o]=ly[o]=x;
}
void push_down(int o){
if(Mx[ls]>ly[o]){ch(ls,ly[o]);ly[ls]=ly[o];}
if(Mx[rs]>ly[o]){ch(rs,ly[o]);ly[rs]=ly[o];}
ly[o]=-1;
} void build(int o,int l,int r){
ly[o]=-1;Mx2[o]=0;
if(l==r){V[o]=Mx[o]=l;Mn[o]=1;return;}
int mid=(l+r)/2;
build(ls,l,mid);
build(rs,mid+1,r);
push_up(o);
} void ud(int o,int l,int r,int L,int R,int x){
if(~ly[o])push_down(o);
int mid=(l+r)/2;
if(L<=l&&r<=R){
if(x>=Mx[o])return;
else if(x>Mx2[o]){ch(o,x);return;}
else{
ud(ls,l,mid,L,R,x);ud(rs,mid+1,r,L,R,x);
//return; //没有return;
}
}
if(L<=mid)ud(ls,l,mid,L,R,x);
if(R>mid)ud(rs,mid+1,r,L,R,x);
push_up(o);
}
ll qSum(int o,int l,int r,int L,int R){
if(~ly[o])push_down(o);
if(L<=l&&r<=R)return V[o];
int mid=(l+r)/2;
ll ans=0;
if(L<=mid)ans+=qSum(ls,l,mid,L,R);
if(R>mid)ans+=qSum(rs,mid+1,r,L,R);
push_up(o);
return ans;
}
int main(){
while(~scanf("%d%d",&n,&m)){
build(1,1,n);
while(m--){
scanf("%d%d",&l,&r);
ll tp=qSum(1,1,n,l,r);
ud(1,1,n,l,r,l);
printf("%lld\n",tp-qSum(1,1,n,l,r));
}
}
}

hdu6521 吉司机线段树的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. HDU - 6315 吉司机线段树

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

  8. HDU 5306 吉司机线段树

    思路: 后面nlogn的部分是伪证... 大家可以构造数据证明是这是nlog^2n的啊~ 吉老司机翻车了 //By SiriusRen #include <cstdio> #include ...

  9. Petrozavodsk Winter-2018. AtCoder Contest. Problem I. ADD, DIV, MAX 吉司机线段树

    题意:给你一个序列,需要支持以下操作:1:区间内的所有数加上某个值.2:区间内的所有数除以某个数(向下取整).3:询问某个区间内的最大值. 思路(从未见过的套路):维护区间最大值和区间最小值,执行2操 ...

随机推荐

  1. ES6-WeakSet数组结构

    WeakSet 也会去重 总结: 1.成员都是对象: 2.成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏: 3.不能遍历,方法有 add.delete.has. ...

  2. WordPress 文件下载漏洞

    Google dork:inurl:"/wp-content/themes/liberator/inc/php/download.php" exploit:https://www. ...

  3. windows系统搭建zookeeper

    安装&配置 在apache的官方网站提供了好多镜像下载地址,然后找到对应的版本 下载地址: http://mirrors.cnnic.cn/apache/zookeeper/zookeeper ...

  4. swiper手滑导航圆点不同步

    // 滚动图 var mySwiper = new Swiper('.swiper-container', { // 如果需要分页器 pagination: { el: '.swiper-pagina ...

  5. JS去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  6. 【Java】导入项目时,出现The project cannot be built until build path errors are resolved错误解决方法

    先检查jar包,jar包的地址如果不一样需要remove后重新导入的,右键项目→Build Path. 看额外的jar包有没有×,地址正不正确,要是不正确,remove错误jar包,再点击Add Ex ...

  7. 基于V7的emWin多屏显示方案模板,同时驱动LCD和OLED例程

    说明: 1.多屏驱动跟多图层驱动是类似的,可以使用函数GUI_SelectLayer做切换选择. 2.为了避免OLED闪烁问题,创建一个128*64bit的显存空间,然后使用emWin的GUI_TIM ...

  8. Java变量在内存中的存储

    目录 Java变量在内存中的存储 成员变量 局部变量 总结 Java变量在内存中的存储 以下探究成员变量和局部变量在内存中的存储情况. package com.my.pac04; /** * @aut ...

  9. C++ 面向对象程序设计复习大纲

     这是我在准备C++考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题会 ...

  10. DockerFlie的基本命令解析

    DockerFlie官网文档:  https://docs.docker.com/engine/reference/builder/   DockerFile中文: http://www.docker ...