• 【AtCoder2442】フェーン現象 (Foehn Phenomena)


    题面

    分析

    这道题其实是差分模板qvq 区间修改 单点查询

    而且题面也疯狂暗示,相邻两点海拔差,用差分简直是按照出题人意思来的,而且人性化的是n+1个点刚好n个区间,查询也只用查询第n点。

    同时,知道海拔差的情况下是可以算出温度的,所以本质上这个差分数组合理也是因为可以通过前缀和倒推出温度。

    所以对于每个修改,其实只有一头一尾两个点受了影响,即l-1和l的高度差影响温度和r和r+1的高度差影响温度,中间相对高度是不变的,不影响温度。

    就修改这两个点就OK了.因为查询的是第n个点,其实答案可以一直累着走,修改区间的同时更新答案

    代码

    1. #include<bits/stdc++.h>  
    2. using namespace std;  
    3. #define N 200020  
    4. #define ll long long  
    5. ll n,q,s,t,x,l,r,v,ans,last;  
    6. ll c[N];  
    7. template<class T>  
    8. inline void read(T &x)  
    9. {  
    10.     x=0;ll f=1;static char c=getchar();   
    11.     while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}  
    12.     while(c>='0'&&c<='9'){x=x*10+c-'0',c=getchar();}  
    13.     x*=f;  
    14. }   
    15. inline ll cal(ll x){return x>0?-(x*s):-(x*t);}  
    16. int main()  
    17. {  
    18.   
    19.     read(n);read(q);read(s);read(t);  
    20.     for(ll i=0;i<=n;i++)  
    21.     {  
    22.         read(x);  
    23.         c[i]=x-last;  
    24.         last=x;ans+=cal(c[i]);  
    25.     }  
    26.     for(ll i=1;i<=q;i++)  
    27.     {  
    28.         read(l),read(r),read(v);  
    29.         ans-=cal(c[l]),c[l]+=v,ans+=cal(c[l]);  
    30.         if(r<n)ans-=cal(c[r+1]),c[r+1]-=v,ans+=cal(c[r+1]);  
    31.         printf("%lld ",ans);  
    32.     }  
    33.     return 0;  
    34. }  
  • 相关阅读:
    [转载] ASP.NET MVC (一)——深入理解ASP.NET MVC
    冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式
    工厂模式怎么用?举例说明
    使用设计模式,到底有什么好处?举例说明
    百度 Echarts 地图表 js 引用路径
    移动Web
    uni-app
    微信公众号分享时,提示invalid signature,签名错误
    windows系统开放外部访问端口
    node报错Request header field Content-Type is not allowed by
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9852310.html
Copyright © 2020-2023  润新知