珂朵莉树吼哇,我永远喜欢珂朵莉.jpg

题目链接

题目大意:给定\(n\)个互不相交(可能包含)的矩形,以及\(m\)个有颜色的点。询问每个矩形内部的点有多少种不同的颜色

dsu on tree,扫描线


分析:关键的条件是互不包含,也就是我们把每个矩形和最小的包含它的矩形连边,那么会形成一棵森林。

这个可以用扫描线来完成,从左往右扫

  • 如果一个线段\([l,r]\)是矩形的左边界,那么就将这个矩形和原来\([l,r]\)内代表的矩形连边。之后我们将\([l,r]\)赋值为该矩形

  • 如果一个线段\([l,r]\)是矩形的右边界,那么我们就将\([l,r]\)这段赋值为该矩形的父亲

点当做矩形处理即可,注意边界问题。如果点和左边界横坐标相同,优先处理左边界

维护线段树(珂朵莉树好写.jpg)

这样我们建出一棵树,直接dsu on tree即可

代码使用了右值引用等特性,请-std=c++11

相关文章:

  • 2021-12-22
  • 2021-07-10
  • 2021-06-24
  • 2021-10-06
  • 2021-12-19
  • 2021-12-24
  • 2021-09-12
  • 2021-12-22
猜你喜欢
  • 2021-12-27
  • 2021-08-21
  • 2021-04-05
  • 2021-12-17
  • 2021-07-22
  • 2021-10-26
  • 2021-12-26
  • 2021-04-15
相关资源
相似解决方案