[bzoj4826][Hnoi2017]影魔
来自FallDream的博客,未经允许,请勿转载,谢谢。
#include<iostream> #include<cstdio> #include<vector> #define MN 200000 #define ll long long #define getchar() (*S++) char B[1<<26],*S=B; using namespace std; inline int read() {int x = 0; char ch = getchar();while(ch < '0' || ch > '9')ch = getchar();while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x; }int a[MN+5],n,m,p1,p2,cnt=0,L[MN+5],R[MN+5],rt[MN+5]; struct Tree{int l,r,x;ll val;}T[MN*80]; struct data{int l,r,x;}; vector<data> v[MN+5]; struct MyQue {int q[MN+5],top;void clear(int x){q[top=0]=x;}int ins(int i){while(top&&a[q[top]]<a[i]) --top;int ret=q[top];q[++top]=i;return ret;} }Q;inline int NewNode(int x){T[++cnt]=T[x];return cnt;}ll Query(int x,int l,int r,int lt,int rt) {if(l==lt&&r==rt) return T[x].val;int mid=lt+rt>>1;ll sum=1LL*(r-l+1)*T[x].x;if(r<=mid) return sum+Query(T[x].l,l,r,lt,mid);else if(l>mid) return sum+Query(T[x].r,l,r,mid+1,rt);else return sum+Query(T[x].l,l,mid,lt,mid)+Query(T[x].r,mid+1,r,mid+1,rt); }void Modify(int x,int l,int r,int lt,int rt,int ad) {T[x].val+=1LL*(r-l+1)*ad;if(l==lt&&r==rt){T[x].x+=ad;return;}int mid=lt+rt>>1;if(r<=mid) Modify(T[x].l=NewNode(T[x].l),l,r,lt,mid,ad);else if(l>mid) Modify(T[x].r=NewNode(T[x].r),l,r,mid+1,rt,ad);else Modify(T[x].l=NewNode(T[x].l),l,mid,lt,mid,ad),Modify(T[x].r=NewNode(T[x].r),mid+1,r,mid+1,rt,ad); }int main() {fread(B,1,1<<26,stdin);n=read();m=read();p1=read();p2=read();for(int i=1;i<=n;++i) a[i]=read();for(int i=1;i<=n;++i) L[i]=Q.ins(i);Q.clear(n+1);for(int i=n;i;--i) R[i]=Q.ins(i);for(int i=1;i<=n;++i){if(i<n) v[i].push_back((data){i+1,i+1,p1});if(L[i]&&R[i]<=n) v[L[i]].push_back((data){R[i],R[i],p1});if(L[i]&&i<=R[i]-2) v[L[i]].push_back((data){i+1,R[i]-1,p2});if(R[i]<=n&&i>=L[i]+2) v[R[i]].push_back((data){L[i]+1,i-1,p2});}for(int i=1;i<=n;++i){rt[i]=rt[i-1];for(int j=0;j<v[i].size();++j)Modify(rt[i]=NewNode(rt[i]),v[i][j].l,v[i][j].r,1,n,v[i][j].x);}for(int i=1;i<=m;++i){int l=read(),r=read();printf("%lld\n",Query(rt[r],l,r,1,n)-Query(rt[l-1],l,r,1,n));}return 0; }
转载于:https://www.cnblogs.com/FallDream/p/bzoj4826.html
[bzoj4826][Hnoi2017]影魔相关推荐
- [BZOJ4826][HNOI2017]影魔(主席树)
4826: [Hnoi2017]影魔 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 669 Solved: 384 [Submit][Status ...
- Bzoj4826 [Hnoi2017]影魔
Time Limit: 20 Sec Memory Limit: 512 MB Submit: 425 Solved: 244 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实 ...
- [题解]bzoj4826 HNOI2017 影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...
- BZOJ4826: [Hnoi2017]影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个 ...
- bzoj4826 hnoi2017影魔
Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个 ...
- bzoj4826[hnoi2017]影魔
题意:每次询问一个区间[l,r],问[l,r]中的每一对(i,j)能够贡献多少总加成?给定序列a是1~n的一个排列,也就是a[i]两两不同. 设z=max{a[i+1],a[i+2],...,a[j- ...
- [AH2017/HNOI2017]影魔
P3722 [AH2017/HNOI2017]影魔 题解: 法一: [bzoj4826][HNOI2017]影魔 直接转化成区间内单点的贡献, 分开p1,p2考虑 而min(ai,aj),max(ai ...
- 【BZOJ4826】[Hnoi2017]影魔 单调栈+扫描线
[BZOJ4826][Hnoi2017]影魔 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝 ...
- [AH2017/HNOI2017] 影魔
[AH2017/HNOI2017]影魔 30pts 暴力在每个区间中枚举点对(a,b)(a,b)(a,b)并查询点对之间的最大值maxmaxmax,若max<=min(a,b)max<=m ...
- bzoj 4826 [Hnoi2017]影魔
http://www.elijahqi.win/archives/3687 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式 ...
最新文章
- kafka多分区只有一个在消费_kafka多个消费者只有一个消费
- 【LeetCode】0136. 只出现一次的数字
- 单循环链表(C语言实现)
- jQuery form表单的serialize()参数和其他参数 如何一起传给后端
- Mysql千万级数据查询优化技巧
- easyui-textbox锁定按钮不锁定_刘诗雯锁定世界杯参赛资格!孙颖莎不满足要求,无缘对阵伊藤美诚...
- Java中的三大特性 - 超详细篇
- 微软疑断自由软件开发者“活路”,禁止在微软商店发布商业开源
- 74HC/LS/HCT/F系列芯片的区别及使用[转]
- fgo服务器维护补偿,FGO1月23日服务器故障说明公告 全服补偿24圣晶石
- 数据库简介、SQL 语的增加删除修改查询命令
- 路径MTU(PMTU)发现控制与DF位
- 做个火影般的架构师,阿里内网疯狂传阅的“M8级”分布式架构笔记
- OpenCV 颜色空间RGB 到HSI CMYK的转换 C++
- Java并发基础知识(五)
- java浮点数化为整数_[Java教程]javascript浮点数转换成整数三种方法
- linux下刻录光盘读取不了_Linux操作系统下光盘刻录实战
- EclipseADT在虚拟机上运行Helloworld程序
- OSGi框架学习------基本概念了解
- 计算机网络思维导图(对网络探索)