此题的万能门卡能够打开所有的门,其实就是每一扇门对应门卡区间都包含了某一张门卡,那么该卡就叫做万能门卡,由于所有门对应的门卡区间是连续的,所以我们可以直接使用差分来计数每一张门卡对应了多少扇门,对应的门数如果为m那么这张门卡即为万能门卡,对于每一扇门的区间,将该区间内的所有门卡计数加一
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,m;
int d[N];//门卡计数
int main()
{
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int l,r;
        cin>>l>>r;
        d[l]++,d[r+1]--;//差分区间加1
    }
    for(int i=1;i<=n;i++)
        d[i]+=d[i-1];//计算前缀和
    int ans=0;
    for(int i=1;i<=n;i++)
        if(d[i]==m)ans++;
    cout<<ans<<endl;
}
n, m = map(int, input().split())
d = [0] * (n + 1)
for _ in range(m):
    l, r = map(int, input().split())
    d[l] += 1
    if r + 1 <= n:
        d[r + 1] -= 1
for i in range(1, n + 1):
    d[i] += d[i - 1]
ans = sum(1 for i in range(1, n + 1) if d[i] == m)
print(ans)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = 100010; // Assuming the maximum value of N
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] d = new int[N];
        for (int i = 0; i < m; i++) {
            int l = scanner.nextInt();
            int r = scanner.nextInt();
            d[l]++;
            if (r + 1 <= n) {
                d[r + 1]--;
            }
        }
        for (int i = 1; i <= n; i++) {
            d[i] += d[i - 1];
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (d[i] == m) {
                ans++;
            }
        }
        System.out.println(ans);
    }
}
        小红有n张门卡,编号为1~n。有m扇门,第i扇门需要一张编号在li~ri区间内的卡才能打开。
如果一张门卡可以打开所有的门,我们定义这张门卡叫做万能门卡,现在请你计算这n张卡里有多少张万能门卡。
第一行给出两个正整数n,m
接下来m行每行两个正整数li,ri
1≤n,m≤105
1≤li≤ri≤n
输出一个正整数代表万能门卡的张树。
输入
4 2
1 3
2 4
输出
2