【CF1000C】Covered Points Count(离散化+差分)

本文介绍了如何使用离散化和差分的方法解决计算点被线段覆盖次数的问题。提供了正常和作者自己的算法思路,通过离散化点的位置并应用差分操作,可以计算出每个点被覆盖的精确次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点此看题面
大致题意: 给出 n n n条线段,分别求有多少点被覆盖 1 1 1次、 2 2 2次… n n n次。


正常的算法

好吧,这道题目确实有个很简单的贪心做法(只可惜我做的时候没有想到,结果想了半天只想出一个无比麻烦的),这里介绍一个稍微有些复杂的。


不正常的算法(我的算法)

考虑离散化每一个出现过的点以及这些点后面的点(之所以要离散化这些后面的点,是为了方便后面的差分)。

假如我们用 p [ i ] p[i] p[i]来表示原来为 i i i的数离散化后的值,并用 q [ i ] q[i] q[i]表示离散化后值为 i i i的数原来的值,则:

对于一条线段,假设它的左端点为 l l l,右端点为 r r r,那么我们就将 f [ p [ l ] ] f[p[l]] f[p[l]]加1,并将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值