[CF377D][线段树][扫描线]Developing Game
CF377D 把 l , r l,r l , r 看成两维坐标,假设最后有解,那一定存在一个 ( L , R ) (L,R) ( L , R ) 使得 L ≥ m a x { l [ i ] } , L ≤ m i n { v [ i ] } L\ge max\{l[i]\},L\le min\{v[i]\} L ≥ m a x { l [ i ] } , L ≤ m i n { v [ i ] } 且 R ≥ m a x { v [ i ] } , R ≤ m i n { r [ i ] } R\ge max\{v[i]\},R\le min\{r[i]\} R ≥ m a x { v [ i ] } , R ≤ m i n { r [ i ] } ,否则显然不满足条件 即是把 l , v , r l,v,r l , v , r 看作一个横坐标 ( l , v ) (l,v) ( l , v ) 纵坐标 ( v , r ) (v,r) ( v , r ) 的矩形,要求尽量多的矩形使得它们的面积并不为空(可以为0,就是矩形并为一个点的情况) 那就可以线段树+扫描线了 Code: # include <bits/stdc++.h> # define pb push_back using namespace std ; inline int read ( ) { int res = 0