哎,越来越水了,囧,应该是本来就很水
,这个题,真佩服想到这种算法的人,膜拜!Orz
#include<stdio.h>
const int MAXN=1000003;
const int base=10003;
int arr[MAXN]={0};
int main()
{
int N,C,Q,Mi,Ni,Ai,i,j;
scanf("%d%d%d",&N,&C,&Q);
while(C--)
{
scanf("%d%d%d",&Mi,&Ni,&Ai);
arr[Mi] += Ai;
arr[Ni+1] -= Ai;
}
for( i=1 ; i<=N ; i++ )
arr[i] += arr[i-1] ;
for( i=1 ; i<=N ; i++ )
arr[i]=(arr[i]+arr[i-1])%base;
while(Q--)
{
scanf("%d%d",&Mi,&Ni);
printf("%d\n",(arr[Ni]-arr[Mi-1]+base)%base);
}
return 0;
}
本文介绍了一种使用一维数组实现区间更新和查询的有效算法。通过两次差分技巧,该算法能够在O(N)的时间复杂度内完成区间更新,并支持O(1)时间内的单点查询,适用于解决特定类型的问题。
4229

被折叠的 条评论
为什么被折叠?



