题目链接:影魔

  这道题就是去年序列的弱化版啊……

  我们枚举最大值的位置\(i\),找出左边第一个比\(a_i\)大的位置\(l\),右边第一个比\(a_i\)大的位置\(r\),然后我们分开考虑一下\(p_1\)和\(p_2\)的贡献。

  首先由于\(a_i\)为最大值,那么左端点不会小于\(l\),右端点不会大于\(r\)。

  容易发现只有左端点为\(l\),右端点为\(r\)才会产生\(p_1\)的贡献。

  然后产生\(p_2\)贡献的有两种:一种是左端点为\(l\),右端点在区间\((i,r)\)中;另一种是左端点区间\((l,i)\)中,右端点为\(r\)。

  还有一种情况需要考虑,就是左端点和右端点差为\(1\),会产生\(p_1\)的贡献。对每个询问直接计算就可以了。

  所以这个问题可以抽象到二维平面上。有一些点和一些线段都有权值,每次询问某个矩形内部的权值和。

  于是离线排序+扫描线+树状数组即可。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 200010using namespace std;
typedef long long llg;struct data{int l,r,x,b,z;data(int A=0,int B=0,int C=0,int D=0,int E=0):l(A),r(B),x(C),b(D),z(E){}bool operator < (const data &h)const{return x<h.x;}
}s1[maxn<<1],s2[maxn*3];
int n,m,p1,p2,S[maxn],top,ls;
int a[maxn],le[maxn],ri[maxn];
llg ans[maxn],c1[maxn],c2[maxn];int getint(){int w=0;bool q=0;char c=getchar();while((c>'9'||c<'0')&&c!='-') c=getchar();if(c=='-') c=getchar(),q=1;while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();return q?-w:w;
}void add(int x,int y){for(int i=x;i<=n;i+=i&(-i)) c1[i]+=y,c2[i]+=1ll*x*y;}
llg sum(int x){llg t=0;for(int i=x;i;i-=i&(-i)) t+=(x+1)*c1[i]-c2[i];return t;
}int main(){File("sf");scanf("%d %d %d %d",&n,&m,&p1,&p2);a[0]=a[n+1]=n+1; S[top=1]=0;for(int i=1;i<=n+1;i++){if(i<=n) a[i]=getint();while(a[S[top]]<a[i]) ri[S[top--]]=i;le[i]=S[top]; S[++top]=i;}for(int i=1,l,r;i<=m;i++){l=getint(),r=getint(); ans[i]+=(r-l)*p1;s1[i]=data(l,r,l-1,i,-1);s1[i+m]=data(l,r,r,i,1);}sort(s1+1,s1+m*2+1);for(int i=1;i<=n;i++){if(le[i] && ri[i]<=n) s2[++ls]=data(le[i],le[i],ri[i],0,p1);if(le[i] && ri[i]>i+1) s2[++ls]=data(i+1,ri[i]-1,le[i],0,p2);if(ri[i]<=n && i>le[i]+1) s2[++ls]=data(le[i]+1,i-1,ri[i],0,p2);}sort(s2+1,s2+ls+1); int n1=1,n2=1;while(!s1[n1].x) n1++;for(int i=1;n1<=m*2 && i<=n;i++){while(n2<=ls && s2[n2].x==i){add(s2[n2].r+1,-s2[n2].z);add(s2[n2].l,s2[n2].z),n2++;}while(n1<=m*2 && s1[n1].x==i){ans[s1[n1].b]+=s1[n1].z*(sum(s1[n1].r)-sum(s1[n1].l-1));n1++;}}for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/lcf-2000/p/6789680.html

BZOJ 4826 【HNOI2017】 影魔相关推荐

  1. BZOJ 4826: [Hnoi2017]影魔 单调栈 主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=4826 年少不知空间贵,相顾mle空流泪. 和上一道主席树求的东西差不多,求两种对 1. max(a ...

  2. bzoj 4826: [Hnoi2017]影魔

    Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个 ...

  3. bzoj 4826 [Hnoi2017]影魔

    http://www.elijahqi.win/archives/3687 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式 ...

  4. 4826: [Hnoi2017]影魔

    题目链接 对于每组询问,分别考虑p1p_1类型和p2p_2类型对答案的贡献 预处理preipre_i表示在灵魂ii左边第一个战斗力比它大的灵魂 类似的预处理nexinex_i 那么,所有满足贡献为p1 ...

  5. [BZOJ4826][HNOI2017]影魔(主席树)

    4826: [Hnoi2017]影魔 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 669  Solved: 384 [Submit][Status ...

  6. [AH2017/HNOI2017] 影魔

    [AH2017/HNOI2017]影魔 30pts 暴力在每个区间中枚举点对(a,b)(a,b)(a,b)并查询点对之间的最大值maxmaxmax,若max<=min(a,b)max<=m ...

  7. 【BZOJ4826】[Hnoi2017]影魔 单调栈+扫描线

    [BZOJ4826][Hnoi2017]影魔 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝 ...

  8. [AH2017/HNOI2017]影魔

    P3722 [AH2017/HNOI2017]影魔 题解: 法一: [bzoj4826][HNOI2017]影魔 直接转化成区间内单点的贡献, 分开p1,p2考虑 而min(ai,aj),max(ai ...

  9. AC日记——[Hnoi2017]影魔 bzoj 4826

    4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...

最新文章

  1. Java面试题汇总及答案2021最新(ioNio)
  2. 空间映射网络--Spatial Transformer Networks
  3. 怎么预约鸿蒙系统,华为鸿蒙2.0系统-鸿蒙2.0系统预约-艾艾软件园
  4. 希尔排序的基本原理及实现
  5. 盖茨推荐人人该读的九本书
  6. 25行AS3代码编程大赛的第一名!25行代码构造的AS3游戏
  7. android 4个布局,Android - 4种基本布局
  8. Mybatis核心配置文件xml详解
  9. php中获取系统信息的方法
  10. 小Z的袜子(BZOJ-2038)
  11. HTML/CSS入门及基础
  12. JMeter中持续时间设置成永远调度器才会起作用
  13. 解决办法:Invalid Gradle JDK configuration found
  14. 软考-网络工程师复习资料
  15. WIN7安装MTK驱动(系统找不到指定文件!解决方案)
  16. 【Matlab】在Simulink中仿真Park变换
  17. MATLAB随机数的应用ppt,Matlab生成随机数.ppt
  18. 无熟人难办事?- 闲聊设计模式-迪米特法则
  19. 大数据Hadoop之——数据同步工具DataX
  20. 【边学边记_10】——8 位7段数码管的动态显示

热门文章

  1. LeetCode【217. Contains Duplicate】
  2. Jfinal框架Modal获取属性值非常奇怪的问题
  3. 数学笔记--线性代数
  4. 写在《30天自制操作系统》上市之前
  5. selection at the technology management
  6. 光有面罩不是能防护的
  7. convex function
  8. my understanding for love
  9. Unity架构有点乱
  10. python安装pymssql