【HNOI2017】影魔
题目描述
输入
输出
样例输入
样例输出
提示
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-'',ch=getchar();
return str;
}
int L[N],R[N],n,m,p1,p2,a[N],q[N];
ll Tree[N*],mark[N*],ans[N];
struct AKK{
int id,l,r;
}ques[N];
#define ls (node<<1)
#define rs (node<<1|1)
void pushdown(int node,int l,int r)
{
if(!mark[node])return ;
int sizels=((l+r)>>)-l+,sizers=r-((l+r)>>);
Tree[ls]+=mark[node]*sizels;Tree[rs]+=mark[node]*sizers;
mark[ls]+=mark[node];mark[rs]+=mark[node];
mark[node]=;
}
void updata(int node){Tree[node]=Tree[ls]+Tree[rs];}
void change(int l,int r,int node,int sa,int se,int ad)
{
if(r<sa || l>se)return ;
if(sa<=l && r<=se)
{
Tree[node]+=(ll)ad*(r-l+);mark[node]+=ad;
return ;
}
pushdown(node,l,r);
int mid=(l+r)>>;
change(l,mid,ls,sa,se,ad);
change(mid+,r,rs,sa,se,ad);
updata(node);
}
ll getsum(int l,int r,int node,int sa,int se)
{
if(r<sa || l>se)return ;
if(sa<=l && r<=se)return Tree[node];
pushdown(node,l,r);
int mid=(l+r)>>;
return getsum(l,mid,ls,sa,se)+getsum(mid+,r,rs,sa,se);
updata(node);
}
void pf()
{
int r=;
q[r]=n+;
for(int i=n;i>=;i--)
{
while(r> && a[i]>=a[q[r]])r--;
R[i]=q[r];
q[++r]=i;
}
}
void work()
{
pf();
int k=m;
for(int i=n;i>=;i--)
{
if(i+<=R[i]-)
change(,n+,,i+,R[i]-,p2);change(,n+,,R[i],R[i],p1-p2);
while(k> && ques[k].l==i)ans[ques[k].id]+=getsum(,n+,,,ques[k].r),k--;
}
}
void Clear(){memset(Tree,,sizeof(Tree));memset(mark,,sizeof(mark));}
bool comp(const AKK &p,const AKK &qq){return p.l<qq.l;}
int main()
{
n=gi();m=gi();p1=gi();p2=gi();
for(int i=; i<=n; i++)a[i]=gi();
for(int i=;i<=m;i++)ques[i].l=gi(),ques[i].r=gi(),ques[i].id=i;
sort(ques+,ques+m+,comp);
work();
for(int i=;i<=m;i++)ques[i].l=n+-ques[i].l,ques[i].r=n+-ques[i].r,swap(ques[i].l,ques[i].r);
reverse(a+,a+n+);
sort(ques+,ques+m+,comp);
Clear();
work();
for(int i=;i<=m;i++)printf("%lld\n",ans[i]);
return ;
}
【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\)之间 ...
- 4826: [Hnoi2017]影魔
4826: [Hnoi2017]影魔 https://lydsy.com/JudgeOnline/problem.php?id=4826 分析: 莫队+单调栈+st表. 考虑如何O(1)加入一个点,删 ...
- 【LG3722】[HNOI2017]影魔
[LG3722][HNOI2017]影魔 题面 洛谷 题解 先使用单调栈求出\(i\)左边第一个比\(i\)大的位置\(lp_i\),和右边第一个比\(i\)大的位置\(rp_i\). 考虑\(i\) ...
- [BZOJ4826][HNOI2017]影魔(主席树)
4826: [Hnoi2017]影魔 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 669 Solved: 384[Submit][Status][ ...
- 【BZOJ4826】[Hnoi2017]影魔 单调栈+扫描线
[BZOJ4826][Hnoi2017]影魔 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝 ...
- [bzoj4826][Hnoi2017]影魔_单调栈_主席树
影魔 bzoj-4826 Hnoi-2017 题目大意:给定一个$n$个数的序列$a$,求满足一下情况的点对个数: 注释:$1\le n,m\le 2\cdot 10^5$,$1\le p1,p2\l ...
- bzoj4826 [Hnoi2017]影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...
- BZOJ:4826: [Hnoi2017]影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...
- [AH/HNOI2017]影魔
题目背景 影魔,奈文摩尔,据说有着一个诗人的灵魂. 事实上,他吞噬的诗人灵魂早已成千上万. 千百年来,他收集了各式各样的灵魂,包括诗人. 牧师. 帝王. 乞丐. 奴隶. 罪人,当然,还有英雄. 题目描 ...
- HNOI2017影魔
影魔 这么简单的方法尽然想不到,我是真的菜 对每个点,用单调栈的方式处理出他左右第一个比他大的数的位置,你可以把\(0\)和\(n+1\)设成\(inf\). 显然对于每对\(lef[i]\)和\(r ...
随机推荐
- 20155215 第二周测试1 与 myod
课堂测试 第一题 每个.c一个文件,每个 .h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程截图,要全屏,包含自 ...
- 关于Mac OS 使用GIT的引导
1. 下载Git installer 链接地址:https://ncu.dl.sourceforge.net/project/git-osx-installer/git-2.14.1-intel-un ...
- socket_sever实现多客户端并发
#!/usr/bin/env python # -*- coding:utf-8 -*- import socketserver class mysever(socketserver.BaseRequ ...
- Hibernate之SQL查询
Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用H ...
- WPF自学入门(十)WPF MVVM简单介绍
前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...
- JAVA_SE基础——3.Java程序的开发流程
上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...
- 常用的汇编指令 movs stos
movsb 把寄存机esi所存的地址的数据以字节复制到edi movsw 把寄存机esi所存的地址的数据以word复制到edi movsd 把寄存机esi所存的地址的数据以dword复制到e ...
- WebBench的安装与使用
webbench最多可以模拟3万个并发连接去测试网站的负载能力. 一.编译安装 1.上传压缩包到虚机里,rz webbench-1.5.tar.gz 2.解压 tar zxvf webbench-1. ...
- Python学习之中文注释问题
简单写个输入.输出,并注释 # 输入 print'100+200=',100+200 # 输入 name = raw_input() 报错了: SyntaxError: Non-ASCII chara ...
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...