【GDOI 2013模拟】屏保

题目大意

要求维护由 n 个点((0,h1),(2,h2)...(n1,hn1)组成的折线, Q 组询问,要求支持单点修改,以及查询位于x=a直线下方以及折线上方的面积。

n,Q<=105


分析

这题有不少的解法,但基本的都是把折线拆成若干个独立的梯形的答案之和。

通过维护面积的解法

我们用线段树来暴力维护 fa 表示直线 x=a 以下折线下方的面积。对于一个梯形的小段我们分成一个矩形和一个三角形,矩形的部分可以将 [0,h0) 这部分区间加一,而 [h0,h1) 部分是一个等差数列,我们只需要维护一个支持区间加上一个数、区间加上一个等差数列,以及单点查询的线段树就可以了。

维护式子的解法

考虑两种情况:梯形完全在直线之下、梯形露出了个尖角,三角形不完全在直线上。
对于第一种情况直接减去整个梯形的面积即可。
对于第二种情况,直接计算对答案的贡献,暴力展开二次函数维护系数。
需要统计有哪些完全在直线以下,哪些完全在直线以上。

维护二次函数的解法

在上一种解法中提到了二次函数。我们发现即便完全在直线以下、或者完全在直线以上,也不过是一次函数或者常量。那么我们写出分段函数,用树状数组维护 fa 表示询问 x=a 时的二次函数的系数。比较方便好写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值