题目要求为给出数个区间表示区间内的树将被砍掉,求最后未被砍的树的个数。
如果数据较小,时间要求较低的话,可以直接用数组0或1来表示被砍和未被砍。
当数据较大,时间要求较高的时候,即要考虑优化方法

可以将题目理解为给出一列数,给出数个区间,每次每个区间的各个数都加k,求修改后每个数的值。

为了减少操作次数,我们可以只修改区间端点处的某个值,而不把区间内的所有值都修改了。
因此只要考虑在题目要求的变化后,
什么量是区间内外都不改变,只有区间端点处改变的。

显然,将后一个数减前一个数所得的值满足上述要求。因此,在每次修改后,只要将区间左端点的差数组值-1,右端点后一个数的差数组值+1,最后,用差数组的前缀和求出变化后的原数组,即可输出答案。

include

using namespace std;
int main()
{
int i,l,m,b,e,z;
int d[10010]={0},a[10010]={0};
cin>>l>>m;
for (i=1;i<=m;i++)
{
cin>>b>>e;
d[b]--;
d[e+1]++;
}
a[0]=d[0];
z=0;
if (a[0]==0) z++;
for (i=1;i<=l;i++)
{
a[i]=a[i-1]+d[i];
if (a[i]==0) z++;
}
cout<<z;
return 0;
}