差分。
设a[i]为这个点被多少个区域包含。
设f[i]为a[i]-a[i-1]。
于是每次读入一个区间[u,v]就把f[u]++,f[v+1]--。
每次计算前加上f[i]就是a[i]了。
只有当a[i]=0时这棵树才没有被砍掉。
#include"cstdio" #include"cctype" int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-‘0‘,isdigit(c=getchar())); return x; } int f[10002]; int main() { int l=read(),m=read(),now=0,ans=0; while(m--) { f[read()]++; f[read()+1]--; } for(int i=0; i<=l; i++) { now+=f[i]; ans+=!now; } printf("%d",ans); return 0; }