这是ccf2022年3月份的第二题出行计划,用到了差分算法,我不明白用差分算法的原理是什么,虽然我已经了解了差分算法却依然看不理解代码,我把一个博主的满分代码放在下面了,希望有人可以给我讲讲
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 4e5+10;
int n,m,k;
int b[N];//差分数组
//令l~r之间的数都+c
void insert(int l,int r,int c)
{
b[l]+=c;
b[r+1]-=c;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
int left = x-y+1;//定义左边界
left = left>0?left:1;
int right = x;//定义右边界
insert(left,right,1);
}
//前缀和操作,得到各个点的数值
for(int i=1;i<=N;i++)
{
b[i] = b[i-1]+b[i];
}
while(m--)
{
int x;
cin>>x;
cout<<b[x+k]<<endl;//直接得到x+k处的数值
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「只须一笑不须愁X」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_53641110/article/details/124031629