一、知识点 差分数组: 1、定义:某一数组的前一项-后一项的查,即差分数组da[i]=stu[i]-stu[i-1] (i>0),stu[0]=0; 2、作用范围:只能是区间元素同时增加或减少相同的数的情况才能用 3、作用:数组连续区间同时增或者同时减时,避免区间修改的数据量大时导致超时 4、例子:在a和b区间同时增加c,则da[a]+=c;da[b+1]-=c; 之后stu[i]=da[1]+da[2]+…+da[i] (i>0) 二、例题 1、分苹果 2、代码
#include<stdio.h>
#include<string.h>
int da
[100005];
int main(){
int a
,b
,c
;
int i
,j
;
int n
,m
;
int sum
=0;
memset(da
,0,sizeof(da
));
scanf("%d %d",&n
,&m
);
for(i
=1;i
<=m
;i
++){
scanf("%d %d %d",&a
,&b
,&c
);
da
[a
]+=c
;
da
[b
+1]-=c
;
}
sum
+=da
[1];
printf("%d",sum
);
for(i
=2;i
<=n
;i
++){
sum
+=da
[i
];
printf(" %d",sum
);
}
return 0;
}
参考资料 差分数组