经典老题了,之前一直用线段树,直到知道了差分。。。
题目是0到n都种了一个树,可以考虑偏移一位,1到n+1种了一个树
l到r区间-1即可直接利用差分数组,求一遍前缀和即可得到原数组,等于1的代表没有被砍掉
#include<iostream> using namespace std; int a[10010]; int main() { int n,k; cin>>n>>k; a[1]=1; a[n+2]=-1; while(k--) { int l,r; cin>>l>>r; l++,r++; a[l]--; a[r+1]++; } for(int i=1;i<=n+1;i++) a[i]+=a[i-1]; int ans=0; for(int i=1;i<=n+1;i++) if(a[i]>=1) ans++; cout<<ans<<endl; }