差分题-记录详情
题目:
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); } }
浙公网安备 33010602011771号