当前位置: 首页 > news >正文

题解:[AHOI2017/HNOI2017] 影魔

题目传送门

题意分析

\(p_1,p_2\) 无关,分开计算贡献是显然的。

考虑如何刻画贡献。

记询问区间为 \([l,r]\),原序列为 \(a_1,a_2,\cdots,a_n\)

那么:

  • \((i,j)\) 产生 \(p_1\) 贡献当且仅当(和 \(j=i+1\) 时恒有 \(p_1\) 贡献):

    \[\max_{k=i+1}^{j-1}a_k<\min(a_i,a_j) \]

  • \((i,j)\) 产生 \(p_2\) 贡献有两种方式:

    \[\begin{aligned} a_i<&\max_{i=i+1}^{j-1}<a_j\\ a_j<&\max_{i=i+1}^{j-1}<a_i\\ \end{aligned} \]

\(a_x\)\(a_{i+1},a_{i+2},\cdots,a_{j-1}\) 中的最大值,则三种贡献都与 \(x\) 有关。

发现通过 \((i,j)\)\(x\) 不能优化,正难则反,考虑通过 \(x\) 统计 \((i,j)\) 的贡献。

\(L_i,R_i\) 分别为 \(i\) 左边、右边的第一个大于 \(a_i\) 的位置。若不存在,则钦定 \(L_i=0\)\(R_i=n+1\)

显然有 \(L_x\leq i<x<j\leq R_x\),否则不满足 \(x\) 的定义。

  • 对于 \(p_1\)

    又因为要产生 \(p_1\) 贡献,\(i\leq L_x\)\(R_x\leq j\)

    联立不等式,解得 \((i,j)=(L_x,R_x)\)

    那么 \(x\) 对于 \([l,r]\) 的贡献便很好算的。

  • 对于 \(p_2\)

    类似地联立不等式,可知:

    • \(a_i<a_j\),为 \(i\in[L_x+1,i-1],j=R_x\)
    • \(a_j<a_i\),为 \(i=L_x,j\in[i+1,R_x-1]\)

统计答案,可以扫描线,扫过 \(a_1,a_2,\cdots,a_n\) 的似乎后对应的在区间上加贡献。

同时扫描线统计 \([l,r]\) 答案即可。

AC 代码

//#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
using namespace std;
typedef long long ll;
constexpr const int N=200000,M=200000;
struct question{int l,r,id,w;
};
vector<question>q[N+1];
int n,m,p1,p2,a[N+1],L[N+1],R[N+1];
vector<pair<int,int>>rL[N+1+1],lR[N+1];
ll ans[M+1];
struct segTree{struct node{int l,r;ll value,tag;int size(){return r-l+1;}}t[N<<2|1];void up(int p){t[p].value=t[p<<1].value+t[p<<1|1].value;}void build(int p,int l,int r){t[p]={l,r};if(l==r){return;}int mid=l+r>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);up(p);}void down(int p){if(t[p].tag){t[p<<1].value+=1ll*t[p<<1].size()*t[p].tag;t[p<<1].tag+=t[p].tag;t[p<<1|1].value+=1ll*t[p<<1|1].size()*t[p].tag;t[p<<1|1].tag+=t[p].tag;t[p].tag=0;}}void add(int p,int l,int r,int k){if(l<=t[p].l&&t[p].r<=r){t[p].value+=1ll*t[p].size()*k;t[p].tag+=k;return;}down(p);if(l<=t[p<<1].r){add(p<<1,l,r,k);}if(t[p<<1|1].l<=r){add(p<<1|1,l,r,k);}up(p);}ll query(int p,int l,int r){if(l<=t[p].l&&t[p].r<=r){return t[p].value;}down(p);ll ans=0;if(l<=t[p<<1].r){ans=query(p<<1,l,r);}if(t[p<<1|1].l<=r){ans+=query(p<<1|1,l,r);}return ans;}
}t;
void pre(){vector<int>s;for(int i=1;i<=n;i++){while(s.size()&&a[s.back()]<=a[i]){s.pop_back();}if(s.size()){L[i]=s.back();}else{L[i]=0;}s.push_back(i);}s.resize(0);for(int i=n;1<=i;i--){while(s.size()&&a[s.back()]<=a[i]){s.pop_back();}if(s.size()){R[i]=s.back();}else{R[i]=n+1;}s.push_back(i);}for(int i=1;i<=n;i++){lR[L[i]].push_back({R[i],i});rL[R[i]].push_back({L[i],i});}
}
void solve(){t.build(1,0,n+1);for(int i=1;i<=n;i++){for(auto x:rL[i]){t.add(1,x.first,x.first,p1);}for(auto x:rL[i]){t.add(1,x.first+1,x.second-1,p2);}for(auto x:lR[i]){t.add(1,x.second+1,x.first-1,p2);}for(auto x:q[i]){ans[x.id]+=x.w*t.query(1,x.l,x.r);}}
}
int main(){/*freopen("test.in","r",stdin);freopen("test.out","w",stdout);*/ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m>>p1>>p2;for(int i=1;i<=n;i++){cin>>a[i];}pre();for(int i=1;i<=m;i++){int l,r;cin>>l>>r;q[l-1].push_back({l,r,i,-1});q[r].push_back({l,r,i,1});ans[i]=1ll*(r-l)*p1;}solve();for(int i=1;i<=m;i++){cout<<ans[i]<<'\n';}cout.flush();/*fclose(stdin);fclose(stdout);*/return 0;
}
http://www.jsqmd.com/news/344953/

相关文章:

  • 2026厂房通风降温哪家好深度分析:三大主流方案的选择路径 - 速递信息
  • 智慧校园平台解决方案综合概述与最佳实践
  • 2026年比较好的钢模板加工/市政钢模板值得信赖厂家推荐(精选) - 品牌宣传支持者
  • 基于深度学习的教师课堂行为检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • [STM32L5] 【STM32L562 DK试用】3、GPIO的输入应用
  • 2026年比较好的尼龙隔热条/宣峰隔热条信誉优质供应参考(可靠) - 品牌宣传支持者
  • 科研绘图告别 “无效加班”!虎贲等考 AI:10 分钟生成期刊级图表,数据可视化零门槛
  • 龙牡壮骨营养棒:国民老品牌的「成长营养解决方案」,优缺点全解析 - 行业调研院
  • 3.1 龙牡壮骨营养棒怎么样?72年国民药企的“硬核”营养新选择 - 行业调研院
  • Python异步编程asyncio(三):Coroutine与任务管理
  • USACO历年青铜组真题解析 | 2018年1月
  • 课程论文急救指南:虎贲等考 AI 3 天搞定高分稿,拒绝熬夜凑字
  • 硫测定仪哪个厂家品质好?国内优质生产商与国际品牌全解析 - 品牌推荐大师
  • 人工设计问卷VS虎贲等考AI|差的不只是速度,是论文调研通过率!
  • 电子世界的奇妙冒险:01-2. 调试与工程专题:问题总是藏在某个忽视的角落
  • 从百模大战到行业落地:中国电信大模型实践全解析
  • 2026年汽车租赁公司公司权威推荐:成都租车公司/成都租车行/旅游租车/旅行租车/汽车租赁平台/电动汽车租赁/租车SUV/选择指南 - 优质品牌商家
  • 好写作AI:理工科的“实验步骤翻译官”,把操作手册写成学术传奇!
  • Linux常用命令速查手册
  • 程序员必学:央国企大模型落地趋势与高价值场景分析(收藏版)
  • 人工智能应用- 语言理解:05.大语言模型
  • Python语法篇三:让你的代码既专业又优雅
  • 2026年四川门卫室岗亭厂家哪家强?适配多场景选型参考 兼顾实用与需求 - 深度智识库
  • 开题报告 springboot和vue超市管理山西大学
  • 少走弯路:AI论文网站 千笔写作工具 VS 学术猹,研究生必备!
  • 「腾讯云NoSQL」技能之Redis篇:Redis主从复制机制的原理与演进路线
  • 【建议收藏】零基础转行AI大模型完整路径:从PyTorch到实战项目,一篇搞定!
  • USACO历年青铜组真题解析 | 2018年2月
  • 生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
  • 阻抗电路板从设计到量产5大维度让性能不打折