校门外的树(一维差分)

题目 : 链接: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;
}


posted @   Marinaco  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示