BZOJ:4826: [Hnoi2017]影魔
Description
Input
Output
Sample Input
7 9 5 1 3 10 6 8 2 4
1 7
1 9
1 3
5 9
1 5
Sample Output
39
4
13
16
#include<cstdio>
#include<algorithm>
#define MN 210000
#define lp (p<<1)
#define rp ((p<<1)|1)
#define ll long long
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
struct tree{int si,s,t[];ll sum;tree(){s=t[]=t[]=sum=;}}t[MN<<];
struct ask{int l,r,p;}qu[MN];
bool operator < (ask a,ask b){return a.r<b.r;}
int n,m,p1,p2,a[MN],q=,st[MN],num=,top;ll MMH[MN];
inline void hb(int p,int ty,int v){
if (ty){
if (t[p].s==) return;
t[p].t[]+=v;t[p].sum+=1LL*v*t[p].s;
}else{
if (t[p].s==t[p].si) return;
t[p].t[]+=v;t[p].sum+=1LL*v*(t[p].si-t[p].s);
}
}
inline void pd(int p){
if (t[p].t[]){
hb(lp,,t[p].t[]);
hb(rp,,t[p].t[]);
t[p].t[]=;
}
if (t[p].t[]){
hb(lp,,t[p].t[]);
hb(rp,,t[p].t[]);
t[p].t[]=;
}
}
void ADD(int p,int l,int r,int pos){
t[p].s++;
if (l==r) return;
pd(p);
int mid=l+r>>;
if (pos<=mid) ADD(lp,l,mid,pos);else ADD(rp,mid+,r,pos);
}
void del(int p,int l,int r,int pos){
t[p].s--;
if (l==r) return;
pd(p);
int mid=l+r>>;
if (pos<=mid) del(lp,l,mid,pos);else del(rp,mid+,r,pos);
}
void add(int p,int l,int r,int L,int R,int ty,int v){
if (ty){
if (t[p].s==) return;
}else if (t[p].s==t[p].si) return;
if (l==L&&r==R){hb(p,ty,v);return;}
pd(p);
int mid=l+r>>;
if (R<=mid) add(lp,l,mid,L,R,ty,v);else
if (L>mid) add(rp,mid+,r,L,R,ty,v);else
add(lp,l,mid,L,mid,ty,v),add(rp,mid+,r,mid+,R,ty,v);
t[p].sum=t[lp].sum+t[rp].sum;
}
ll ask(int p,int l,int r,int L,int R){
if (l==L&&r==R) return t[p].sum;
int mid=l+r>>;
pd(p);
if (R<=mid) return ask(lp,l,mid,L,R);else
if (L>mid) return ask(rp,mid+,r,L,R);else
return ask(lp,l,mid,L,mid)+ask(rp,mid+,r,mid+,R);
}
void build(int p,int l,int r){
t[p].si=r-l+;
if (l==r) return;
int mid=l+r>>;
build(lp,l,mid);build(rp,mid+,r);
}
int main(){
register int i,j;
n=read();m=read();p1=read();p2=read();
for (i=;i<=n;i++) a[i]=read();a[]=n+;
for (i=;i<=m;i++) qu[i].l=read(),qu[i].r=read(),qu[i].p=i;
sort(qu+,qu++m);st[top=]=;
build(,,n);
for (i=;i<=m;i++){
for (;q<=qu[i].r;q++){
for (j=top;a[st[j]]<a[q];j--);
if (q!=) add(,,n,st[j]+(j==),q-,,p1);
if (st[j]>) add(,,n,,st[j]-,,p2);
if (j!=top) add(,,n,st[j]+,q-,,p2);
while (a[st[top]]<a[q]) del(,,n,st[top--]);
ADD(,,n,st[++top]=q);
}
MMH[qu[i].p]=ask(,,n,qu[i].l,qu[i].r);
}
for (i=;i<=m;i++) printf("%lld\n",MMH[i]);
}
BZOJ:4826: [Hnoi2017]影魔的更多相关文章
- bzoj 4826: [Hnoi2017]影魔 [主席树 单调栈]
4826: [Hnoi2017]影魔 题意:一个排列,点对\((i,j)\),\(p=max(i+1,j-1)\),若\(p<a_i,a_j\)贡献p1,若\(p\)在\(a_1,a_2\)之间 ...
- ●BZOJ 4826 [Hnoi2017]影魔
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4826 题解: 主席树,单调栈 以前还没做过这种维护信息的题,感觉好奇妙. 每对相邻的两个数所 ...
- BZOJ 4826: [Hnoi2017]影魔 单调栈 主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=4826 年少不知空间贵,相顾mle空流泪. 和上一道主席树求的东西差不多,求两种对 1. max(a ...
- BZOJ 4826: [Hnoi2017]影魔 单调栈+可持久化线段树
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个 ...
- BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
首先用单调栈和扫描线处理出每一个数左面最近的比他大的数在$l[i]$,右面最近的比他大的数$r[i]$. 然后就可以考虑每种贡献是在什么时候产生的. 1.$(l[i],r[i])$产生$p1$的贡献 ...
- bzoj 4826: [Hnoi2017]影魔【单调栈+树状数组+扫描线】
参考:https://www.cnblogs.com/lcf-2000/p/6789680.html 这是一个相对码量少的做法,用到了区间修改区间查询的树状数组,详见:www.cnblogs.com/ ...
- 4826: [Hnoi2017]影魔
4826: [Hnoi2017]影魔 https://lydsy.com/JudgeOnline/problem.php?id=4826 分析: 莫队+单调栈+st表. 考虑如何O(1)加入一个点,删 ...
- [BZOJ4826][HNOI2017]影魔(主席树)
4826: [Hnoi2017]影魔 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 669 Solved: 384[Submit][Status][ ...
- 【LG3722】[HNOI2017]影魔
[LG3722][HNOI2017]影魔 题面 洛谷 题解 先使用单调栈求出\(i\)左边第一个比\(i\)大的位置\(lp_i\),和右边第一个比\(i\)大的位置\(rp_i\). 考虑\(i\) ...
随机推荐
- 成功解决react+webpack打包文件过大的问题
最近在学习并使用webpack+react+antd写了一个小项目,也可以说是demo,待全部开发完成后发现webpack的打包文件足足有将近13.3MB,快吓死宝宝了,经过连续几天的学习,和调试最后 ...
- Hibernate学习---基本介绍+作用+配置
从今天开始重新学习(以前学的太匆忙)Hibernate,这篇文章主要就一下几点进行讲解和说明: Hibernate的基本介绍 Hibernate的作用 Hibernate基本配置 Hibernate的 ...
- python学习日记:day11----装饰器进阶
1.wraps from functools import wraps def wrapper(func): #func = holiday @wraps(func)#输出holiday的函数名 de ...
- 【NOIP模拟】从我背后出现
Description 给定n个点m条边的无向连通图,对于每条边求出强制选这条边后的最⼩⽣成树⼤⼩. \(n\leq 10^5,m\leq 2*10^5\) Input Format 第 1 行包含两 ...
- Java 管程解决生产者消费者问题
同样是实验存档.//.. 依然以生产者消费者问题作为背景. 管程(=“资源管理程序”)将资源和对资源的操作封装起来,资源使用者通过接口操作资源就 ok,不用去考虑进程同步的问题. 管程: packag ...
- ArcGIS 网络分析[1.3] 在个人地理数据库中创建网络数据集/并简单试验最佳路径
上篇使用shp文件创建网络数据集,然而在ArcGIS 9中就支持地理数据库了,数据库的管理更为科学强大. 本篇就使用个人地理数据库进行建立网络数据集,线数据仍然可以是1.1中的线数据,但是我做了一些修 ...
- 【WebGL】《WebGL编程指南》读书笔记——第6章
一.前言 最近重感冒发烧,妈蛋好难受,请假了3天,驾校也没去,简直僵硬!今天继续WebGL的学习. 二.正文 A. GLSL支持两种数据值类型: 整数型(int)与浮点型( ...
- 例子:韩顺平JavaScript----JS乌龟抓小鸡游戏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- arm-linux-objdump反汇编使用指南
一. arm-linux-objdump常用来显示二进制文件信息,常用来查看反汇编代码 二. 常用选项: 1.-b bfdname 指定目标码格式 2.-disassemble或者-d 反汇编 ...
- golang 轮训加密算法
Roy's friends has been spying on his text messages, so Roy thought of an algorithm to encrypt text m ...