ABC468 扫描线|贡献法|二阶差分|线段树优化DP
E贡献法 扫描线 二阶差分求一个数组的所有子数组的平均数之和。等价于求所有子数组的加权和。对于长度iii的子数组权重就是1/i1/i1/i考虑贡献法有两种一种是每个元素的贡献一种是每个前缀的贡献。先来说第一个这个比较麻烦每个元素的贡献考虑对于每个长度iii的划窗划过整个数组每一步给窗口内加上1/i1/i1/i。对于一个iii只用考虑每个位置被加了多少次1/i1/i1/i。这个东西打表或者手玩可以发现贡献基本是一个梯形开始前缀部分单增的等差数列中间一段平台最后后缀是一个单减的等差数列。并且根据窗口长度是否超过nnn的一半中间平台区的高度不一样。但总之都是区间加等差数列这可以线段树也可以二阶差分。这里选择二阶差分做法所谓二阶差分就是需要做两次前缀和才能还原。以下代码封装了一个区间加等差数列的二阶差分更新函数传入区间l,r首项s公差d。具体根据窗口长度分讨两种情况加的等差数列值这里就不说了可以作为一个结论也可以手玩。另外这里有一堆乘法除法加减法为了取模简单用了modintvoidsolve(){intn;cinn;vectorMinta(n10);autoadd[](intl,intr,Mint s,Mint d)-void{if(lr)return;a[l]s;a[l1]d-s;Mint Ll,Rr;a[r1]-s(R-L1)*d;a[r2]s(R-L)*d;};rep(i,1,n){intcurinv(i,M2);if(i(n1)/2){add(1,i-1,cur,cur);add(n-i2,n,(i-1)*cur,-cur);add(i,n-i1,1,0);}else{inthn-i1;add(1,n-i,cur,cur);add(i1,n,(h-1)*cur,-cur);add(n-i1,i,h*cur,0);}}rep(i,1,n){a[i]a[i-1];}rep(i,1,n){a[i]a[i-1];}Mint ans0;rep(i,1,n){intx;cinx;ansMint(x)*a[i];}coutans.val\n;}另一个简单一点的做法是分析每个前缀的贡献每个区间的贡献实际上可以看成(si−sj)/(i−j)(s_i-s_j)/(i-j)(si​−sj​)/(i−j)那么对于前缀si,sjs_i,s_jsi​,sj​分别有1/(i−j),−1/(i−j)1/(i-j),-1/(i-j)1/(i−j),−1/(i−j)的贡献。考虑一个sks_ksk​的贡献他作为sis_isi​的时候是对于j∈[0,k]j∈[0,k]j∈[0,k]这些时候的贡献之和是∑j0k1/j\sum_{j0}^k 1/j∑j0k​1/j。他作为−sj-s_j−sj​的时候同理是对于j∈[k,n]j∈[k,n]j∈[k,n]这些时候的贡献之和是∑jkn1/j\sum_{jk}^n 1/j∑jkn​1/j。注意到这两个贡献都是1/j1/j1/j的区间和维护一个1/j1/j1/j的前缀和即可快速计算贡献。voidsolve(){intn;cinn;vectorMinta(n10),b(n10);rep(i,1,n){intx;cinx;b[i]b[i-1]inv(i,M2);a[i]a[i-1]x;}Mint ans0;rep(i,1,n){ans(b[i]-b[n-i])*a[i];}coutans.val\n;}Fdp 线段树手上两个变量xy0扫一个排列p对每个pip_ipi​可以决定使用x或y中的一个令使用的这个变量t变成max⁡(pi,t)\max(p_i,t)max(pi​,t)如果t在这一步变大了答案计数器1。问答案最大多少。看到这个朴素的想法就是f(i,x,y)f(i,x,y)f(i,x,y)表示考虑前i个两个变量的值分别为x,y能得到的最大答案。这状态太多了考虑压缩。注意到前缀里的每个元素都必须操作那么对于前缀最大值mximx_imxi​一定也被x或y操作了那么我们永远可以确定第i步后max⁡(x,y)mxi\max(x,y)mx_imax(x,y)mxi​。于是x,y中较大元素永远是确定的只需要在状态里维护较小元素即可f(i,j)f(i,j)f(i,j)表示考虑前i个x,y里较小值为j时的最大答案。这还是太多了转移会是O(n)O(n)O(n)的总复杂度O(n2)O(n^2)O(n2)。仔细分析转移看看能不能数据结构优化。如果pip_ipi​大于x,y的较大值那么让x,y哪个来都能答案1,并且操作的那个会变成pip_ipi​。那么贪心的思考一定让较大变量变这样较小值还能保持很小后面变大的次数更多答案更大。如果pip_ipi​位于x,y之间那么可以让x来也可以让y来。如果让较大值来答案不变x,y也都不变无事发生。如果让较小值来较小值会变大为pip_ipi​答案1如果pip_ipi​小于较小值也是无事发生。发现对于上面第一个情况就是对于所有较小值答案都会加1也就是f(i,j)f(i−1,j)1,1≤j≤nf(i,j)f(i-1,j)1,1\le j\le nf(i,j)f(i−1,j)1,1≤j≤n对于第二个情况可以从较小变量小于pip_ipi​的状态转移到pip_ipi​并且答案1也就是f(i,pi)max⁡f(i−1,j)1,j≤pif(i,p_i)\max f(i-1,j)1,j\le p_if(i,pi​)maxf(i−1,j)1,j≤pi​可以发现这两个情况就是区间加区间查询最值可以用线段树优化转移复杂度为O(nlog⁡n)O(n\log n)O(nlogn)。对于第二种情况计算出f(i,pi)f(i,p_i)f(i,pi​)后还需要插入线段树也就是还需要实现一个单点赋值操作。这和前面的全局1操作并不冲突。structTree{#definelsu1#definersu1|1structNode{intl,r;ll mx,add;}tr[N2];voidpushup(intu){tr[u].mxmax(tr[ls].mx,tr[rs].mx);}voidpushdown(intu){if(tr[u].add){tr[ls].mxtr[u].add;tr[rs].mxtr[u].add;tr[ls].addtr[u].add;tr[rs].addtr[u].add;tr[u].add0;}}voidbuild(intu,intl,intr){tr[u]{l,r,0,0};if(lr){tr[u].mx-inf;return;}intmid(lr)1;build(ls,l,mid);build(rs,mid1,r);pushup(u);}voidmodify(intu,intl,intr,intval){if(tr[u].lltr[u].rr){tr[u].mxval;tr[u].addval;return;}else{intmid(tr[u].ltr[u].r)1;pushdown(u);if(midl)modify(ls,l,r,val);if(rmid)modify(rs,l,r,val);pushup(u);}}voidmodify1(intu,intl,intr,intval){if(tr[u].lltr[u].rr){tr[u].mxmax(tr[u].mx,val);return;}else{intmid(tr[u].ltr[u].r)1;pushdown(u);if(midl)modify1(ls,l,r,val);if(rmid)modify1(rs,l,r,val);pushup(u);}}llquery(intu,intl,intr){if(ltr[u].ltr[u].rr)returntr[u].mx;pushdown(u);intmid(tr[u].ltr[u].r)1;if(rmid)returnquery(ls,l,r);if(lmid)returnquery(rs,l,r);returnmax(query(ls,l,r),query(rs,l,r));}}t;voidsolve(){intn;cinn;intmx0;t.build(1,0,n);intx;cinx;t.modify1(1,0,0,1);mxx;rep(i,2,n){intx;cinx;if(xmx){t.modify(1,0,n,1);}else{intrest.query(1,0,x);t.modify1(1,x,x,res1);}mxmax(mx,x);}coutt.query(1,0,n)\n;}

相关新闻

Windows渗透测试中的反弹Shell技术解析与实战

Windows渗透测试中的反弹Shell技术解析与实战

1. Windows渗透测试中的反弹Shell技术解析在安全评估和渗透测试工作中,反弹Shell(Reverse Shell)是最常用的技术手段之一。与常规Shell不同,反弹Shell的特点是让目标主机主动连接攻击者控制的服务器,这种方式能有效绕过…

2026/8/4 1:42:20 阅读更多 →
AMD Ryzen处理器终极调试指南:免费开源工具让你的电脑性能飙升

AMD Ryzen处理器终极调试指南:免费开源工具让你的电脑性能飙升

AMD Ryzen处理器终极调试指南:免费开源工具让你的电脑性能飙升 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…

2026/8/4 1:42:20 阅读更多 →
嵌入式开发必知:12种核心通信协议详解与实战选型指南

嵌入式开发必知:12种核心通信协议详解与实战选型指南

嵌入式开发,说到底就是让各种芯片、传感器、模块之间“说话”。而“说话”的规则,就是通信协议。今天这篇文章,我们不谈虚的,直接梳理嵌入式领域最常用、最核心的12种通信协议。无论你是刚入行的新手,还是需要快速回顾…

2026/8/4 1:42:20 阅读更多 →

最新新闻

后端性能优化实战:从JVM调优到系统配置的硬件级提升

后端性能优化实战:从JVM调优到系统配置的硬件级提升

最近在技术社区看到不少开发者讨论“打满一小时全场”这类性能优化话题,很多朋友把大量精力花在调参、改算法这些“神经”层面的优化上,却忽略了最基础的“硬件”环境。这就像打篮球只练投篮姿势,却不练体能和力量,关键时刻自然撑…

2026/8/4 2:17:33 阅读更多 →
Unity 2D游戏寻路实战:NavMeshPlus核心优势与四大应用场景详解

Unity 2D游戏寻路实战:NavMeshPlus核心优势与四大应用场景详解

1. 项目概述:为什么NavMeshPlus是2D游戏寻路的“破局者”?在Unity里做2D游戏,寻路功能几乎是绕不开的一环。无论是RTS里的小兵集群冲锋,还是RPG里NPC的智能巡逻,甚至是塔防游戏里怪物沿着蜿蜒曲折的路径前进&#xff0…

2026/8/4 2:17:33 阅读更多 →
C++:splog

C++:splog

C++ 的 spdlog 是高性能日志库之一,只包含头文件(Header-only),并且原生支持多线程、异步日志以及丰富的输出目标(控制台、文件、轮转日志等)。 Logger(日志器): 日志的入口,负责接收消息并分发给 Sink。 Sink(输出目标): 决定日志输出到哪里(如终端、文件、数据…

2026/8/4 2:17:33 阅读更多 →
好用的数据库实时同步软件,首选PanguSync

好用的数据库实时同步软件,首选PanguSync

做运维和开发的朋友应该都清楚,数据库数据同步是日常刚需。不管是数据备份、机房迁移,还是主从数据对接,都离不开靠谱的数据库实时同步软件。市面上很多工具要么配置复杂,要么同步延迟高,普通新手很难上手,…

2026/8/4 2:17:33 阅读更多 →
CUTLASS Python接口:用Python享受CUDA极致性能,AI开发效率提升10倍

CUTLASS Python接口:用Python享受CUDA极致性能,AI开发效率提升10倍

1. 项目概述:当AI开发撞上CUDA的“墙”如果你是一名AI开发者,尤其是深度学习和高性能计算领域的从业者,那么“CUDA”这个词对你来说,大概率是又爱又恨。爱它,是因为它几乎是所有现代AI模型在GPU上飞驰的基石&#xff0…

2026/8/4 2:17:33 阅读更多 →
汪沛走向光大保德信基金:带着底气,也带着难题

汪沛走向光大保德信基金:带着底气,也带着难题

近期的光大保德信基金在资本市场上,可谓是集众多焦点于一身。一是因为该公司旗下部分重仓科技赛道的基金,在二季度展现出了强劲的爆发力,净值得到大幅攀升。二是因为该公司整体权益业务长期承压,多支产品面临规模缩水与清盘风险。…

2026/8/4 2:16:32 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →