AtCoder2442フェーン現象 (Foehn Phenomena)
Posted nsd-email0820
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder2442フェーン現象 (Foehn Phenomena)相关的知识,希望对你有一定的参考价值。
题面
分析
这道题其实是差分模板qvq 区间修改 单点查询
而且题面也疯狂暗示,相邻两点海拔差,用差分简直是按照出题人意思来的,而且人性化的是n+1个点刚好n个区间,查询也只用查询第n点。
同时,知道海拔差的情况下是可以算出温度的,所以本质上这个差分数组合理也是因为可以通过前缀和倒推出温度。
所以对于每个修改,其实只有一头一尾两个点受了影响,即l-1和l的高度差影响温度和r和r+1的高度差影响温度,中间相对高度是不变的,不影响温度。
就修改这两个点就OK了.因为查询的是第n个点,其实答案可以一直累着走,修改区间的同时更新答案
代码
- #include<bits/stdc++.h>
- using namespace std;
- #define N 200020
- #define ll long long
- ll n,q,s,t,x,l,r,v,ans,last;
- ll c[N];
- template<class T>
- inline void read(T &x)
- {
- x=0;ll f=1;static char c=getchar();
- while(c<‘0‘||c>‘9‘) {if(c==‘-‘)f=-1;c=getchar();}
- while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘,c=getchar();}
- x*=f;
- }
- inline ll cal(ll x){return x>0?-(x*s):-(x*t);}
- int main()
- {
- read(n);read(q);read(s);read(t);
- for(ll i=0;i<=n;i++)
- {
- read(x);
- c[i]=x-last;
- last=x;ans+=cal(c[i]);
- }
- for(ll i=1;i<=q;i++)
- {
- read(l),read(r),read(v);
- ans-=cal(c[l]),c[l]+=v,ans+=cal(c[l]);
- if(r<n)ans-=cal(c[r+1]),c[r+1]-=v,ans+=cal(c[r+1]);
- printf("%lld ",ans);
- }
- return 0;
- }
以上是关于AtCoder2442フェーン現象 (Foehn Phenomena)的主要内容,如果未能解决你的问题,请参考以下文章
html ページの迁移时にフェードアウト,フェードイン效果をだすためのjQuery的プラグイン