BZOJ 4826: [Hnoi2017]影魔 单调栈+可持久化线段树
Description
Input
Output
#include <cstring>
#include <cstdio>
#include <stack>
#include <string>
#include <vector>
#include <algorithm>
#define N 200005
#define ll long long
using namespace std;
void setIO(string s) {
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"w",stdout);
}
int n,m,tp,edges;
int p1,p2;
int val[N];
int sta[N];
int L[N],R[N];
int hd[N];
int tot;
int rtl[N];
int rtr[N];
struct Edge {
int x;
int l;
int r;
int v;
int nex;
}e[N*3];
struct node {
int ls;
int rs;
ll tag;
ll sum;
}t[N*80];
void add(int u,int l,int r,int v) {
e[++edges].nex=hd[u];
hd[u]=edges;
e[edges].l=l;
e[edges].r=r;
e[edges].x=u;
e[edges].v=v;
}
int newnode() {
return ++tot;
}
int update(int x,int l,int r,int L,int R,int v) {
if(L>R) {
return x;
}
int now=newnode();
t[now]=t[x];
t[now].sum+=(ll)(min(r,R)-max(l,L)+1)*v;
if(l>=L&&r<=R) {
t[now].tag+=v;
return now;
}
int mid=(l+r)>>1;
if(L<=mid) {
t[now].ls=update(t[x].ls,l,mid,L,R,v);
}
if(R>mid) {
t[now].rs=update(t[x].rs,mid+1,r,L,R,v);
}
return now;
}
ll query(int x,int l,int r,int L,int R) {
if(!x) {
return 0;
}
if(l>=L&&r<=R) {
return t[x].sum;
}
int mid=(l+r)>>1;
ll re=(ll)t[x].tag*(min(r,R)-max(l,L)+1);
if(L<=mid) {
re+=query(t[x].ls,l,mid,L,R);
}
if(R>mid) {
re+=query(t[x].rs,mid+1,r,L,R);
}
return re;
}
int main() {
// setIO("input");
int i,j;
scanf("%d%d%d%d",&n,&m,&p1,&p2);
for(i=1;i<=n;++i) {
scanf("%d",&val[i]);
}
for(i=1;i<=n;++i) {
while(tp&&val[sta[tp]]<val[i]) {
--tp;
}
L[i]=sta[tp];
sta[++tp]=i;
}
sta[tp=0]=n+1;
for(i=n;i>=1;--i) {
while(tp&&val[sta[tp]]<val[i]) {
--tp;
}
R[i]=sta[tp];
sta[++tp]=i;
}
for(i=1;i<=n;++i) {
add(L[i],R[i],R[i],p1);
add(L[i],i+1,R[i]-1,p2);
add(R[i],L[i]+1,i-1,p2);
}
// 向右
for(i=1;i<=n;++i) {
rtl[i]=rtl[i-1];
for(j=hd[i];j;j=e[j].nex) {
if(e[j].l>i) {
rtl[i]=update(rtl[i],1,n,max(1,e[j].l),min(n,e[j].r),e[j].v);
}
}
if(i!=n) {
rtl[i]=update(rtl[i],1,n,i+1,i+1,p1);
}
}
for(i=n;i>=1;--i) {
rtr[i]=rtr[i+1];
for(j=hd[i];j;j=e[j].nex) {
if(e[j].r<i) {
rtr[i]=update(rtr[i],1,n,max(1,e[j].l),min(n,e[j].r),e[j].v);
}
}
}
while(m--) {
int x,y;
scanf("%d%d",&x,&y);
ll ans=0ll;
ans+=query(rtl[y],1,n,x,y);
ans-=query(rtl[x-1],1,n,x,y);
ans+=query(rtr[x],1,n,x,y);
ans-=query(rtr[y+1],1,n,x,y);
printf("%lld\n",ans);
}
return 0;
}
BZOJ 4826: [Hnoi2017]影魔 单调栈+可持久化线段树的更多相关文章
- 【bzoj4826】[Hnoi2017]影魔 单调栈+可持久化线段树
题目描述 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵魂,都有着自己 ...
- BZOJ 4826: [Hnoi2017]影魔 单调栈 主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=4826 年少不知空间贵,相顾mle空流泪. 和上一道主席树求的东西差不多,求两种对 1. max(a ...
- 【bzoj3956】Count 单调栈+可持久化线段树
题目描述 输入 输出 样例输入 3 2 0 2 1 2 1 1 1 3 样例输出 0 3 题解 单调栈+可持久化线段树 本题是 bzoj4826 的弱化版(我为什么做题总喜欢先挑难的做QAQ) $k$ ...
- 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]影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...
- [BZOJ 3218] A + B Problem 【可持久化线段树 + 网络流】
题目连接:BZOJ - 3218 题目分析 题目要求将 n 个点染成黑色或白色,那么我们可以转化为一个最小割模型. 我们规定一个点 i 最后属于 S 集表示染成黑色,属于 T 集表示染成白色,那么对于 ...
- Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 177 Solved: 128[Submit][Status ...
- BZOJ 4408: [Fjoi 2016]神秘数 可持久化线段树
4408: [Fjoi 2016]神秘数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 Description 一个可重复数字集 ...
- BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
首先用单调栈和扫描线处理出每一个数左面最近的比他大的数在$l[i]$,右面最近的比他大的数$r[i]$. 然后就可以考虑每种贡献是在什么时候产生的. 1.$(l[i],r[i])$产生$p1$的贡献 ...
随机推荐
- 可以获取随机图片的API收集 必应 等
食用方法可以是img标签嵌入在网页中, 也可以在iwall.app里面设置你的桌面背景.还有其他好用的API吗? 请在下放留下您的评论. 非常感谢! 速度: ★★★★★ 功能: 返回Bing的随机图片 ...
- SpringBoot第十篇:thymeleaf详解
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10931435.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 Sprin ...
- ng 引入query
ng 引入jquery 1.在项目中 npm install --save jquery 在对应组件中加入 import * as $ from "jquery"; 在angu ...
- Gitlab安装、备份与恢复
背景:由于需要把gitlab从A服务器转移到B服务器,故在B服务器进行gitlab的安装和恢复备份 步骤: 一.在B服务器安装Gitlab 1. 获取安装包 wget https://mirrors. ...
- Music模块
micro:bit中,MicroPython提供一个Music模块,提供播放音乐的方法,但值得注意的是,控制板上并没有蜂鸣器,所以要外接蜂鸣器,才能听到效果 ,一般接到pin0端口,和gnd地,rob ...
- [转帖]centos 7 avahi-daemon服务的作用及如何关闭
centos 7 avahi-daemon服务的作用及如何关闭 https://blog.csdn.net/tjjingpan/article/details/81237308 关闭 systemct ...
- 【3】hexo+github搭建个人博客的主题配置
更换博客主题 主题可参考:https://hexo.io/themes/ hexo默认主题:Landscape 示例主题:Next 下载Next主题 进入Blog所在目录,输入下载命令 #进入Blog ...
- Java并发专栏(一)—— Process vs Thread
一.前言 程序是代码和数据的集合,是一种静态实体.不具有代码执行和数据处理的能力,更多是一种行为的描述. 如果将程序和处理器结合,处理器将程序加载至内存,然后执行程序代码处理数据.这时就是可执行的程序 ...
- 简要介绍Active Learning(主动学习)思想框架,以及从IF(isolation forest)衍生出来的算法:FBIF(Feedback-Guided Anomaly Discovery)
1. 引言 本文所讨论的内容为笔者对外文文献的翻译,并加入了笔者自己的理解和总结,文中涉及到的原始外文论文和相关学习链接我会放在reference里,另外,推荐读者朋友购买 Stephen Boyd的 ...
- Storm 系列(九)—— Storm 集成 Kafka
一.整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持: ...