形式化题意:给定 m 个区间,若删除一个区间后总覆盖面积不变,求出可以被删除的区间数量。
前缀和+差分思想,计算 1∼n 中每个位置被覆盖的次数,进而求出被覆盖多次的位置。
最后扫一遍所有区间,若该区间内所有位置都被覆盖多次则计入答案。
#include <bits/stdc++.h>
using namespace std;
一条长度为n的公路上, 米小游站着 m名博物工, 其中第i位工人会给 [li,ri]这一段区间中的每个点都种上一棵树。
但由于每个点最多种一颗, 因此如果某些位工人发现自己要种的地方已经有树, 自己就会跳过这个点不管。
米小游为了节约成本,现在要恰好少雇佣一名工人,但同时他不希望少了此人会影响最终种树的结果,现在请你帮他算算有多少名工人都可以成为恰好少雇佣的这一名呢。
第一行输入两个整数 n,m(1≤n≤2×105;1≤m≤105) 代表公路长度和植树工人数量。
接下来输入m行, 每行输入两个正整数li,ri(1≤li≤ri≤n)代表第i 位工人负责种树的区域。
在一行上输出一个整数,代表有多少名工人可以被解雇。
5 3
1 4
1 2
3 4
3
三名工人都可以成为被解雇的那一个。 最终的结果是: [1,1,1,1,0] (1表示有物, 0表示没有.) 解雇第一位工人, 神秘结果依然为 [1,1,1,1,0] : 不会影响结果。 解雇第二位工人, 依然不会影响结。 解雇第三位工人, 依然不会影响结果。