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\) ...
随机推荐
- 探索C++对象模型
只说C++对象模型在内存中如何分配这是不现实的,所以这里选择VS 2013作为调试环境具体探讨object在内存中分配情况.目录给出了具体要探讨的所有模型,正文分标题依次讨论.水平有限,如有错误之处请 ...
- ReactNative布局样式总结
flex number 用于设置或检索弹性盒模型对象的子元素如何分配空间 flexDirection enum('row', 'row-reverse' ,'column','column-rever ...
- xamarin Android activity生命周期详解
学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...
- Thinkphp环境搭建
一.准备工作-基础知识 1.php环境配置 配置php文件运行环境Apache,phpstudy集成环境(还有别的集成环境都可以). 2.设计数据库 根据需求设计table,可以用一些数据库管理工具n ...
- Docker入门书籍
https://yuedu.baidu.com/ebook/d817967416fc700abb68fca1 精细讲解,入门使用极佳.
- Java Error : type parameters of <T>T cannot be determined during Maven Install
遇到了一个问题如下: Caused by the combination of generics and autoboxing. 这是由于泛型和自动装箱联合使用引起的. 可以查看以下两个回答: 1 ...
- Java中静态代码块、构造代码块、构造函数、普通代码块
在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java类中(方法中不能存在静态代 ...
- python内置函数与匿名函数
内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...
- 解决adb push时出现的"Read-only file system"问题
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...