「题解」300iq Contest 2 H. Honorable Mention

本文详细解析了300iq Contest 2中关于最大k子段和的问题,包括寻找函数的上凸性质、使用闵可夫斯基和合并凸包、简单做法、wqs二分法以及整体wqs二分法来优化解决方案,以解决区间划分求最大元素和的查询问题。
摘要由CSDN通过智能技术生成

本文将同步发布于:

题目

题目链接:gym102331H

题意概述

给定一个长度为 n n n 的序列 a a a,有 q q q 次询问,每次询问给定三个参数 l , r , k l,r,k l,r,k,求出对于区间 [ l , r ] [l,r] [l,r],你将其划分为若干个子区间,然后取其中的 k k k 个,最大化取出来的所有元素的和。即:最大 k k k 子段和。

1 ≤ n , q ≤ 3.5 × 1 0 4 1\leq n,q\leq 3.5\times 10^4 1n,q3.5×104 ∣ a i ∣ ≤ 3.5 × 1 0 4 |a_i|\leq 3.5\times 10^4 ai3.5×104

题解

寻找函数的性质

如果我们设 f [ l , r ] ( k ) f_{[l,r]}(k) f[l,r](k) 表示区间 l , r l,r l,r 的最大 k k k 子段和,那么我们不难猜测到 l , r l,r l,r 相同时, f ( k ) f(k) f(k) 是一个上凸函数。

我们考虑证明这一点,即 f ( k ) − f ( k − 1 ) ≥ f ( k + 1 ) − f ( k ) f(k)-f(k-1)\geq f(k+1)-f(k) f(k)f(k1)f(k+1)f(k)

考虑反证法,设 ∃ x ∈ N \exists x\in\mathbb{N} xN,满足 f ( x ) − f ( x − 1 ) < f ( x + 1 ) − f ( x ) f(x)-f(x-1)<f(x+1)-f(x) f(x)f(x1)<f(x+1)f(x)

那么我们考虑在 x − 1 , x , x + 1 x-1,x,x+1 x1,x,x+1 的时候的选取方案。

  • 若取 x + 1 x+1 x+1 的时候正子段仍未取完,那么 f ( x ) f(x) f(x) f ( x − 1 ) f(x-1) f(x1) 多取了一个区间 p ( p > 0 ) p(p>0) p(p>0) f ( x + 1 ) f(x+1) f(x+1) f ( x ) f(x) f(x) 多取了一个区间 q ( q > 0 ) q(q>0) q(q>0)
    如果我们认为 f ( x ) − f ( x − 1 ) < f ( x + 1 ) − f ( x ) f(x)-f(x-1)<f(x+1)-f(x) f(x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值