题意:有n个开发人员,每个人有个技能值vi,每个人不想和技能值不在区间[li,ri]的人合作,现在要选尽可能多的人,使得满足所有选中的人的要求。
思路:首先,如果我们能求出一组L,R,使得每个选中的人i都满足li<=L<=R<=ri并且L<=vi<=R,那么我们就能找到应该选出的人。那么如何求这个L和R呢,把L,R想象成坐标系中的一个点,那么对于每一个人,需要满足li<=L<=vi并且vi<=R<=ri,这样,每个人可以看成一个矩形,问题就变成了寻找一个点使得有最多的矩形覆盖,这个问题可以用线段树+扫描线处理。。。
代码:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#define inf 0x3f3f3f3f
#def