题意就是给你一个高长固定的模板 从先到后向n个区域贴广告纸
后面的会覆盖前面的 问你能看见多少个 看见一个小边也算
那么这题我们怎么看呢
数据长会很大 但是我们发现最多用2e4个 所以离散化 离散化之后按题意从后往前找有没有被覆盖的广告版就行了
注意是从后往前
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
const int MAX_N = 10005;
int n,w;
struct node {
int x;
int y;
}num[MAX_N];
map<int ,int > mp;
int tp[MAX_N*2],vis[MAX_N*2];
int main(){
scanf("%d%d",&n,&w);
for(int i=0;i<n;++i){
scanf("%d%d",&num[i].x,&num[i].y);
tp[i*2] = num[i].x;
tp[i*2+1] = num[i].y;
}
sort(tp,tp+n*2);
int m = unique(tp,tp+n*2)-tp;
for(int i=0;i<m;++i){
mp[tp[i]]=i+1;
}
int ans = n;
for(int i=n-1;i>=0;i--){
num[i].x=mp[num[i].x];
num[i].y=mp[num[i].y];
int num_ = 0;
for(int j = num[i].x;j<=num[i].y;j++){
if(vis[j]==1) {
num_++;
// dbg(num_);
}
else vis[j] = 1;
if(num_ == num[i].y-num[i].x+1){
//dbg(num[i].y-num[i].x+1);
ans--;
}
}
}
printf("%d\n",ans);
return 0;
}