差分题-记录详情

题目:

https://www.luogu.com.cn/problem/AT2442

思路:

差分

维护ans(直接遍历求n的温度会超时)

#include<stdio.h>
#include<string.h>
const int maxn=2e5+7;
long long tt[maxn],h[maxn],d[maxn];
   long long n,q,s,t;
long long f(long long dd)
{
    if(dd>0)
        return -dd*s;
    else
        return -dd*t;
}
int main()
{

    scanf("%lld %lld %lld %lld",&n,&q,&s,&t);
    for(int i=0;i<=n;i++)
        scanf("%lld",&h[i]);
    long long ans=0;
    for(int i=1;i<=n;i++)
      {
          d[i]=h[i]-h[i-1];
          ans+=f(d[i]);
      }
      int l,r,x;
     for(int i=1;i<=q;i++)
     {
         scanf("%d %d %d",&l,&r,&x);
         ans-=f(d[l]);
         d[l]+=x;
         ans+=f(d[l]);
         if(r<=n-1)
         {
             ans-=f(d[r+1]);
             d[r+1]-=x;
             ans+=f(d[r+1]);
         }
         printf("%lld\n",ans);
     }
}

 

posted @ 2021-07-13 16:03  废柴废柴少女  阅读(56)  评论(0)    收藏  举报