点此看题面
大致题意: 给出 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,并将