题意:
思路:
首先,我们可以简单的得到,那些重复覆盖的点我们肯定是不能选的,我们要选的肯定是那些只被覆盖过一次的点,那么现在的问题就到了我们如何快速的找到那些只被覆盖过一次的点?
思路1: 我们根据区间信息建一棵线段树,之后查询他的叶子节点的权值是不是1,复杂度是o(logn)。
思路2:根据差分数组,利用差分数组我们可以直接O(n)的知道叶子节点的权值。
之后我们要开始枚举这些只被覆盖过一次节点的那些边,之后找到一个最小值就好了,那么怎么找呢?
思路1:线段树,我们查询节点权值为1的那些点,看他在那一条边上,之后找到删除最多点的那条边是多少。
思路2:还是差分得到第i条边的可以删除的权值是多少就好了
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
pair<int,int>P[maxn];
struct seg
{
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1