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

P3722 [AHOI2017/HNOI2017] 影魔 - Link

题意

给一个长度为 \(n\) 的序列 \(a\),和两个值 \(p1,p2\)
一个点对 \((x,y)\) 的权值为:

  1. \(a_x,a_y\) 为区间 \([x,y]\) 最大值和次大值:\(p1\)
  2. \(a_x,a_y\) 其中一个是区间 \([x,y]\) 的最大值,令一个不是 \([x,y]\) 次大值:\(p2\)
  3. 其祂情况:0。

\(m\) 次询问 \((l,r)\),求所有满足 \(l\le x<y\le r\) 的点对 \((x,y)\) 的权值和。
\(n,m\le2\times10^5,p1,p2\le1000\)

思路

对于每个 \(i\),求出祂前面第一个比祂大的 \(l\) 和后面第一个比祂大的 \(r\),那么点对 \((l,r)\),权值为 \(p1\),点对 \((l,i+1),(l,i+2),\dots,(l,r-1)\) 的权值为 \(p2\),点对 \((l+1,r),(l+2,r),\dots,(i-1,r)\) 的权值为 \(p2\)
这是一个二维的问题,考虑离线下来用扫描线加线段树,最后要把相邻两个点的贡献加上,祂们的权值都是 \(p1\),但是上面的方法统计不到。

代码

/*
Luogu P3722 [AHOI2017/HNOI2017] 影魔
2026-04-15
*/
#include<bits/stdc++.h>
using namespace std;
namespace IO{template<typename T>inline void read(T&x){x=0;char c=getchar();bool f=0;while(!isdigit(c)) c=='-'?f=1:0,c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();f?x=-x:0;}template<typename T>inline void write(T x){if(x==0){putchar('0');return ;}x<0?x=-x,putchar('-'):0;short st[50],top=0;while(x) st[++top]=x%10,x/=10;while(top) putchar(st[top--]+'0');}inline void read(char&c){c=getchar();while(isspace(c)) c=getchar();}inline void write(char c){putchar(c);}inline void read(string&s){s.clear();char c;read(c);while(!isspace(c)&&~c) s+=c,c=getchar();}inline void write(string s){for(int i=0,len=s.size();i<len;i++) putchar(s[i]);}template<typename T>inline void write(T*x){while(*x) putchar(*(x++));}template<typename T,typename...T2> inline void read(T&x,T2&...y){read(x),read(y...);}template<typename T,typename...T2> inline void write(const T x,const T2...y){write(x),putchar(' '),write(y...),sizeof...(y)==1?putchar('\n'):0;}
}using namespace IO;
#define LL long long
const int maxn=200010,inf=1000000000;
int n,m,p1,p2,L[maxn],R[maxn],a[maxn],cnt_q;
LL ans[maxn];
vector<int>st;
class Sgement_Tree{
private:struct node{LL sum,lan;}t[maxn*4];void add_tag(int u,int add,int l,int r){t[u].sum+=1ll*(r-l+1)*add;t[u].lan+=add;}void down(int u,int l,int r){int mid=l+r>>1;add_tag(u<<1,t[u].lan,l,mid),add_tag(u<<1|1,t[u].lan,mid+1,r);t[u].lan=0;}void update(int u,int l,int r,int ll,int rr,int z){if(l>rr||r<ll) return ;if(ll<=l&&r<=rr) return add_tag(u,z,l,r);down(u,l,r);int mid=l+r>>1;update(u<<1,l,mid,ll,rr,z),update(u<<1|1,mid+1,r,ll,rr,z);t[u].sum=t[u<<1].sum+t[u<<1|1].sum;}LL query(int u,int l,int r,int ll,int rr){if(l>rr||r<ll) return 0;if(ll<=l&&r<=rr) return t[u].sum;down(u,l,r);int mid=l+r>>1;return query(u<<1,l,mid,ll,rr)+query(u<<1|1,mid+1,r,ll,rr);}
public:void update(int l,int r,int z){update(1,1,n,l,r,z);}LL query(int l,int r){return query(1,1,n,l,r);}
}t;
struct node{int w,type,l,r,xs,id;auto operator<=>(const node&other) const=default;
}q[maxn*10];
signed main(){read(n,m,p1,p2);for(int i=1;i<=n;i++) read(a[i]),R[i]=n+1;a[0]=a[n+1]=inf;st.push_back(0);for(int i=1;i<=n;i++){while(a[i]>a[st.back()]) R[st.back()]=i,st.pop_back();L[i]=st.back();st.push_back(i);}for(int i=1;i<=m;i++){int l,r;read(l,r);q[++cnt_q]={l-1,1,l,r,-1,i};q[++cnt_q]={r,1,l,r,1,i};ans[i]=1ll*(r-l)*p1;}for(int i=1;i<=n;i++){int l=L[i],r=R[i];if(l>=1&&r<=n) q[++cnt_q]={r,0,l,l,p1,0};if(r<=n&&i>l+1) q[++cnt_q]={r,0,l+1,i-1,p2,0};if(l>=1&&r>i+1) q[++cnt_q]={l,0,i+1,r-1,p2,0};}sort(q+1,q+1+cnt_q);for(int i=1;i<=cnt_q;i++){auto[w,tp,l,r,z,id]=q[i];if(tp==1) ans[id]+=z*t.query(l,r);else t.update(l,r,z);}for(int i=1;i<=m;i++) write(ans[i]),write("\n");return 0;
}
http://www.jsqmd.com/news/652301/

相关文章:

  • 从CPU到GPU:给你的FunASR Docker镜像手动添加CUDA支持(以0.1.5版为例)
  • Zemax 物理光学传播:从基础理论到实际应用
  • ABAQUS实战技巧:集中质量与耦合约束的协同设置方法
  • Git for Windows v2.53.0(3)发布:修复CVE-2026-32631漏洞,防止NTLM哈希值泄露
  • CSS如何解决Flex布局在老版本安卓机兼容性_使用autoprefixer工具
  • 数智化转型提速 长沙冷链企业激活餐饮供应链发展新活力
  • 古书目窘独立音乐界的古韵新声探索者
  • Harness Engineering 入门指南:从提示词到AI系统设计的完整跃迁
  • 智慧电力设备巡检数据集 电力智能化巡检项目 电力设备缺陷识别 绝缘缺陷图像识别 输电线路巡检图像数据集 YOLO深度学习第10370期
  • Delphi/C++ Builder 10.3.3 安装 TMS 控件避坑指南:从源码到UI Pack的完整流程
  • 生成式AI可观测性落地实战(企业级POC验证过的4层数据采集架构)
  • 学历提升报名怕踩坑?这几个正规渠道,新手直接抄作业 - 品牌测评鉴赏家
  • 如何提高测试用例覆盖率?
  • 深入解析stm32F407总线架构与存储器布局
  • 从CGAN到BEGAN:5种主流GAN变体保姆级选型指南(附PyTorch核心代码对比)
  • websocket和http区别
  • 告别TDMA!聊聊Ti AWR2944雷达芯片主推的DDMA波形到底强在哪
  • 执业药师备考刷题软件推荐 - 品牌测评鉴赏家
  • SAP 功能范围 (Functional Area) 设置与维护完整流程全解
  • 2026执业药师备考指南:5大高口碑机构全解析 - 品牌测评鉴赏家
  • QQ空间数据备份宝典:如何安全完整地保存你的青春记忆?
  • 从原理到实战:深入解析WGS84与GCJ02坐标系的互转逻辑
  • PyTorch实战:5种模型剪枝方法对比与避坑指南(附代码)
  • 扒一扒润德教育执业药师通过率那些事儿 - 品牌测评鉴赏家
  • SAP 功能范围 (Functional Area) 设置与维护全攻略
  • 备考执业药师不踩坑,这样选课程高效又省心 - 品牌测评鉴赏家
  • KingbaseES数据库物理备份还原sys_rman实战指南:从配置到恢复
  • 神经渲染避坑指南:训练自己的NeRF模型时遇到的7个典型问题及解决方案
  • ReAct 模式拆解:Agent 如何做到“边想边做“
  • 别再写满屏if-else了!用Easy Rules + Spring Boot重构你的业务审批流(附完整代码)