zoukankan      html  css  js  c++  java
  • 焚风现象

    题目描述

    题目译自 JOI 2017 Final T1「フェーン現象 / Foehn Phenomena

    焚风是是由于空气作绝热下沉运动时,因温度升高湿度降低而形成的一种干热风。焚风常出现在山脉背风坡,由山地引发的过山气流在背风坡下沉,使过山气流变得干热的一种风。在高压区,空气下沉也可产生焚风。

    IOI 王国永远刮着海风。风从地点 000 依次吹到地点 111,地点 222 ……直到地点 NNN,共 N+1N+1N+1 个地点。JOI 君住在地点 NNN。地点 000 的海拔 A0=0A_0=0A0​​=0,地点 i(1⩽i⩽N)i(1leqslant ileqslant N)i(1iN) 的海拔为 AiA_iAi​​。
    地表风的温度随海拔升降而变化。地点 000 在海边,温度为 000 度;对于任一地点 i(0⩽i<N) i(0leqslant i<N)i(0i<N),从地点 iii 吹到地点 i+1i+1i+1 的风的温差仅取决于两地的海拔差。具体来说:

    • 如果 Ai=Ai+1A_i=A_{i+1}Ai​​=Ai+1​​,风的温度不变;
    • 如果 Ai<Ai+1A_i<A_{i+1}Ai​​<Ai+1​​,风每爬升 111 米,温度就会下降 SSS 度;
    • 如果 Ai>Ai+1A_i> A_{i+1}Ai​​>Ai+1​​,风每下沉 111 米,温度就会升高 TTT 度。

    IOI 国的地壳运动很强烈。你得到了 QQQ 天来地壳运动的数据。在第 jjj 日 (1⩽j⩽Q)(1leqslant jleqslant Q)(1jQ),地点 Lj,Lj+1,…,Rj(1⩽Lj⩽Rj⩽N)L_j, L_j+1, ldots, R_j (1leqslant L_jleqslant R_jleqslant N)Lj​​,Lj​​+1,,Rj​​(1Lj​​Rj​​N) 的海拔升高了 XjX_jXj​​,注意 XjX_jXj​​ 可能是负数。
    你的任务是,计算每天地壳运动后 JOI 君住所的温度。

    输入格式

    第一行有四个整数 N,Q,S,TN, Q, S, TN,Q,S,T,用空格分隔。
    在接下来的 N+1N+1N+1 行中,第 iii 行 (1⩽i⩽N+1)(1leqslant ileqslant N+1)(1iN+1) 有一个整数 Ai−1A_{i-1}Ai1​​。
    在接下来的 QQQ 行中,第 jjj 行 (1⩽j⩽Q)(1leqslant jleqslant Q)(1jQ) 有三个整数 Lj,Rj,XjL_j, R_j, X_jLj​​,Rj​​,Xj​​,用空格分隔。
    输入的所有数的含义见题目描述。

    输出格式

    共 QQQ 行,第 jjj 行 (1⩽j⩽Q)(1leqslant jleqslant Q)(1jQ) 有一个整数,表示第 jjj 日地壳运动后 JOI 君住所的温度。

    样例

    样例输入 1

    3 5 1 2
    0
    4
    1
    8
    1 2 2
    1 1 -2
    2 3 5
    1 2 -1
    1 3 5

    样例输出 1

    -5
    -7
    -13
    -13
    -18

    样例解释 1

    最初,地点 0,1,2,30,1,2,30,1,2,3 的海拔分别是 0,4,1,80,4,1,80,4,1,8。第一天地壳运动后,海拔分别为 0,6,3,80,6,3,80,6,3,8。 此时,风的温度分别为 0,−6,0,−50,-6,0,-50,6,0,5。


    这道题是考试的T3,也是最后一道了(写完要歇会儿)
    乍一眼看上去是个线段树的板子,我考场上也就是这么写的,然后就挂了,话说这场普及难度的考试我竟然只拿了33分(羞涩)
    线段树会卡常,惨的一批
    考完后读了一边题,觉得有点不对,又读了一遍,发现是个思维题,O(1)就能跑
    因为居住点是固定的,而温度只与高度的差值有关 
    还有一个要注意的点就是维护的时候因为要做到O(1),所以要维护高度差,操作上本身没有难度
    下面给出代码:
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    using namespace std;
    inline long long rd(){
        long long x=0,f=1;
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
        return x*f;
    }
    inline void write(long long x){
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10+'0');
        return ;
    }
    long long a[1000006];
    long long s[1000006];
    long long T,S;
    long long check(long long x){
        if(x>0) return x*(0-S);
        if(x<0) return 0-(x*T);
        return 0;
    }
    int main(){
        long long n=rd(),m=rd();
        S=rd();
        T=rd();
        long long ans=0;
        for(long long i=0;i<=n;i++){
            a[i]=rd();
            if(i>0) s[i]=a[i]-a[i-1];
            ans+=check(s[i]);
        }
        while(m--){
            long long x=rd(),y=rd(),z=rd();
            s[x]+=z;
            ans+=(check(s[x])-check(s[x]-z));
            if(y<n){
                s[y+1]-=z;
                ans+=(check(s[y+1])-check(s[y+1]+z));
            }
            write(ans);
            printf("
    ");
        }
        return 0;
    }

    考完后发现我还有不足(实在是太菜了)

    很多会的题没有写出来

    或许这是一次模考,但是却反映出了很多问题

    离考试还有一段时间,要加油了。

    蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿
  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/WWHHTT/p/9677636.html
Copyright © 2011-2022 走看看