【题解】ABC221D Online games

https://atcoder.jp/contests/abc221/tasks/abc221_d

题意

给定\(n\)个区间\([l_i,r_i)\),对于每一个\(k\in [1,n]\),求出有多少个点恰好被\(k\)个不同区间覆盖。

\(n\le 2×10^5,\ l,r\le 10^9\)

Solution

首先将坐标离散化,对于离散化之后的坐标\(x\),设它对应的原值为\(p[x]\)

将所有区间加上去之后,还原出每一个位置被多少个点覆盖。(用差分或者线段树解决)

设当前坐标为\(x\),被覆盖了\(b[x]\)次,我们需要计算在原坐标系内\(x\)对应多少个点。

实际上我们离散化的时候是将\([p[x],p[x+1])\)这个区间给离散成了点\(x\),所以\(x\)实际对应\(p[x+1]-p[x]\)个点。

对于每一个点统计答案即可。

code:线段树:https://atcoder.jp/contests/abc221/submissions/26328261

posted @ 2021-10-03 09:58  hzy1  阅读(128)  评论(1编辑  收藏  举报