差分数组(c++)

干货

差分数组 ,顾名思义,就是记录差值的数组

这里举个例子:

上面一行是原数组,下面一行就是它所对应的差分数组

有些题目需要对原数组进行变动 ,当变动次数多时,可能会出现超时现象。

通过记录差值的方法,只需要变动一些差值,可以更高效地解决问题。

大家可能理解不了上面这段话。先不着急,不妨来做几道题,感受一下差分数组:

题目练习

航班预定统计

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int a[10010];
int d[10010];

int main()
{
	cin>>n>>m;
	while(m--)
	{
		int x,y,v;
		cin>>x>>y>>v;
		d[x] += v;
		d[y+1] -= v;
	}
	for(int i = 1;i<=n;i++)
	{
		a[i] = a[i-1]+d[i];
	}
	for(int i = 1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
	
	return 0;
}

拼车

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int c,t,n;
int a[10010];
int d[10010];

int main()
{
	cin>>c>>t;
	while(t--)
	{
		int x,y,v;
		cin>>v>>x>>y;
		d[x] += v;
		d[y+1] -= v;
		n = max(n,y);
	}
	bool f = true;
	for(int i = 1;i<n;i++)
	{
		a[i] = a[i-1]+d[i];
//		cout<<a[i]<<" ";
		if(a[i]>c)
		{
			f = false;
			break;
		}
	}
//	cout<<endl;
	if(f==true) cout<<"true";
	else cout<<"false";
	
	return 0;
}

会议室预订系统

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,x,y;
int a[10010];
int d[10010];
int ma;

int main()
{
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		int x,y;
		cin>>x>>y;
		d[x]++;
		d[y+1]--;
	}
	for(int i = 1;i<=n;i++)
	{
		a[i] = a[i-1]+d[i];
		ma = max(ma,a[i]);
	}
	cout<<ma;
	
	return 0;
}
相关推荐
汀、人工智能2 分钟前
[特殊字符] 第56课:在排序数组中查找元素的首末位置
数据结构·算法·数据库架构·图论·bfs·在排序数组中查找元素的首末位置
小O的算法实验室3 分钟前
2026年IEEE TASE,面对突发危险区域的基于强化学习的多无人机路径规划,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
AI科技星7 分钟前
全维度相对论推导、光速螺旋时空与北斗 GEO 钟差的统一理论
开发语言·线性代数·算法·机器学习·数学建模
6Hzlia8 分钟前
【Hot 100 刷题计划】 LeetCode 279. 完全平方数 | C++ 动态规划 (完全背包)
c++·leetcode·动态规划
ECT-OS-JiuHuaShan11 分钟前
科学的本来意义,是基于规范的共识逻辑,而非共识方法
人工智能·科技·学习·算法·生活
H Journey14 分钟前
C++ 11 新特性 统一初始化与与 std::initializer_list
c++·列表初始化
木子墨51617 分钟前
LeetCode 热题 100 精讲 | 动态规划进阶篇:最大子数组和 · 分割等和子集 · 最长公共子序列 · 打家劫舍 III
数据结构·c++·算法·leetcode·动态规划·力扣
li16709027022 分钟前
第十章:list
c语言·开发语言·数据结构·c++·算法·list·visual studio
‎ദ്ദിᵔ.˛.ᵔ₎26 分钟前
仿函数使用
c++
Z1Jxxx29 分钟前
C++ P1150 Peter 的烟
数据结构·c++·算法