loj#2332 「JOI 2017 Final」焚风现象

分析

我们发现改变一个区间实际上只有两个端点的贡献变换

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200100],s[2],x,y,z,n,m,q,i,j,k,Ans=0;
signed main(){
    scanf("%lld%lld%lld%lld",&n,&q,&s[1],&s[0]);
    for(i=0;i<=n;i++)scanf("%lld",&a[i]);
    for(i=n;i>0;i--)a[i]-=a[i-1],Ans-=a[i]*s[a[i]>0];
    while(q--){
      scanf("%lld%lld%lld",&x,&y,&z);y++;
      Ans+=a[x]*s[a[x]>0]+(y<=n)*a[y]*s[a[y]>0];a[x]+=z,a[y]-=z;
      Ans-=(a[x]*s[a[x]>0]+(y<=n)*a[y]*s[a[y]>0]);printf("%lld\n",Ans);
    }
    return 0;
}

 

posted @ 2019-09-30 10:38  水题收割者  阅读(266)  评论(0编辑  收藏  举报