呵呵
五一不做比赛,就总结比赛了。
做完了。。。
其实就C题和I题比较有价值。。。。
那就讲讲这两个题吧
C:
给你N个数,N个区间,要求判断是否存在一个唯一的匹配。
思路: 先随便求出一个匹配 , 然后判断这个匹配是否唯一。。。
求出一个匹配的话,可以先把区间按右端点排序,维护一个set,表示当前还没有匹配的点,每次在点集中找最小的但是大于等于当前区间左端点的点跟这段区间匹配。
算是贪心吧,如果有解,肯定能找到一个解。
接下来是判断解的唯一性,解不唯一的情况如下图所示
Pnow是当前点 Snow是当前点匹配的区间,只要当这段区间的左端点到Pnow之间的所有点中存在一个点Pi,Pi所对应的区间的右端点超过了Pnow,我们就可以互换这两个点的匹配。
#include<set>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn