【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 ...
随机推荐
- 201621123060《JAVA程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...
- 学号:201621123032 《Java程序设计》第13周学习总结
1:本周学习总结 2:为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 2.1:简述你想为你的系统增加什么网络功能?设计思路是什么? 创建了一个服务器监听8080端口,通过网络助手客户 ...
- fs 创建文件夹
var http = require("http"); var fs = require("fs"); var server = http.createServ ...
- img加载卡顿,解决办法
我觉得我在这个项目里遇到了太多的第一次.比如上一篇博文:在在360.UC等浏览器,img不加载原因. 当前情况是:图片加载缓慢,图片加载时出现卡顿. 上图:我缩放了图片,估计有点变形.能说明情况就行, ...
- Echarts柱状图实现不同颜色渐变色
第一次写文,只是想记录一下自己平时发现的小功能,这篇主要是实现echarts柱状图,每个柱子实现不同颜色的渐变色,也是第一次接触echarts,后台使用ssm,前台是extjs,直接上效果图 直接上j ...
- JAVA_SE基础——68.RunTime类
RunTime类代表Java程序的运行时环境,每一个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与运行时环境相连,应用程序不能创建自己的Runtime实例,但可以通过getRu ...
- Linq 巧用 Max,Sum
IList<, , , , , }; var sum1 = intList.Sum(s => { == ) { return s; } ; }); Console.WriteLine(&q ...
- Python-模块使用-Day6
Python 之路 Day6 - 常用模块学习 本节大纲: 模块介绍time &datetime模块randomossysshutiljson & picleshelvexml处理ya ...
- [UWP] Custom Capability的使用
Custom Capability 是uwp开发中普通开发者较为不常用的内容,但是在一些OEM和驱动厂商,使用频率比较高 Custom Capability 有两种用户: 1.普通应用程序开发者: 2 ...
- GIT入门笔记(19)GIT 小结
1.add和commit为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:$ git add file1.txt$ g ...