题目 : 链接:https://ac.nowcoder.com/acm/problem/16649
题意:给出m片区域,将这m片区域的树砍掉,问0~l上还有多少棵树
思路:差分
一维差分:
构造一个初始元素都为0的dif数组,长度为[0,n]
如果在i~j上 +k ,那么令dif[i]+k,dif[j+1]-k
进行若干次操作后,进行前缀和.(再加到原数组上,得到结果)
复杂度O(n)
#include<bits/stdc++.h>
using namespace std;
int l,m;
int tree=0;
signed main()
{
ios::sync_with_stdio(false),cin.tie(0);
cin>>l>>m;
vector<int>dif(l+2,0);
for(int i=1;i<=m;i++)
{
int st,ed;
cin>>st>>ed;
dif[st]--;
dif[ed+1]++;
}
for(int i=0;i<=l+1;i++)
{
if(i)dif[i]=dif[i-1]+dif[i];
else dif[i]=dif[i];
}
for(int i=0;i<=l;i++)
{
if(dif[i]==0)tree++;
}
cout<<tree;
return 0;
}
标签:int,ed,dif,门外,cin,差分,一维
From: https://www.cnblogs.com/benscode/p/18622017