差分数组(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;
}
相关推荐
风吹乱了我的头发~41 分钟前
Day52:2026年3月20日打卡
算法
2401_831824965 小时前
基于C++的区块链实现
开发语言·c++·算法
We་ct5 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
愣头不青5 小时前
238.除了自身以外数组的乘积
数据结构·算法
汉克老师6 小时前
GESP5级C++考试语法知识(六、链表(一)单链表)
c++·链表·单链表·快慢指针·进阶·gesp5级·gesp五级
人工智能AI酱6 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager6 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归
m0_518019486 小时前
C++与机器学习框架
开发语言·c++·算法
一段佳话^cyx6 小时前
详解逻辑回归(Logistic Regression):原理、推导、实现与实战
大数据·算法·机器学习·逻辑回归
qq_417695056 小时前
C++中的代理模式高级应用
开发语言·c++·算法