题目链接:https://ac.nowcoder.com/acm/problem/16722
- 差分模版
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll sum[1000005];
ll a[1000005];
ll d[1000005];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int p,l,r;
ll q;
memset(d,0,sizeof(d));
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
while(m--)
{
scanf("%d%d%d%lld",&p,&l,&r,&q);
if(p==1)
{
d[l]+=-q;
d[r+1]-=-q;
}
else
{
d[l]+=q;
d[r+1]-=q;
}
}
scanf("%d%d",&l,&r);
for(int i=2;i<=n;i++)
{
d[i]+=d[i-1];
}
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+d[i]+a[i];
}
printf("%lld\n",sum[r]-sum[l-1]);
}
}
标签:1000005,int,ll,interval,long,区间,sizeof,sum
From: https://www.cnblogs.com/tflsnoi/p/17156179.html