干货
差分数组 ,顾名思义,就是记录差值的数组。
这里举个例子:

上面一行是原数组,下面一行就是它所对应的差分数组
有些题目需要对原数组进行变动 ,当变动次数多时,可能会出现超时现象。
而通过记录差值的方法,只需要变动一些差值,可以更高效地解决问题。
大家可能理解不了上面这段话。先不着急,不妨来做几道题,感受一下差分数组:
题目练习
航班预定统计

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;
}