焚风现象
題目描述
題目譯自?JOI 2017 Final?T1「フェーン現(xiàn)象?/?Foehn Phenomena」
焚風(fēng)是是由于空氣作絕熱下沉運(yùn)動(dòng)時(shí),因溫度升高濕度降低而形成的一種干熱風(fēng)。焚風(fēng)常出現(xiàn)在山脈背風(fēng)坡,由山地引發(fā)的過山氣流在背風(fēng)坡下沉,使過山氣流變得干熱的一種風(fēng)。在高壓區(qū),空氣下沉也可產(chǎn)生焚風(fēng)。
IOI 王國永遠(yuǎn)刮著海風(fēng)。風(fēng)從地點(diǎn)?000?依次吹到地點(diǎn)?111,地點(diǎn)?222?……直到地點(diǎn)?NNN,共?N+1N+1N+1?個(gè)地點(diǎn)。JOI 君住在地點(diǎn)?NNN。地點(diǎn)?000?的海拔?A0=0A_0=0A?0??=0,地點(diǎn)?i(1?i?N)i(1\leqslant i\leqslant N)i(1?i?N)?的海拔為?AiA_iA?i??。
地表風(fēng)的溫度隨海拔升降而變化。地點(diǎn)?000?在海邊,溫度為?000?度;對于任一地點(diǎn)?i(0?i<N) i(0\leqslant i<N)i(0?i<N),從地點(diǎn)?iii?吹到地點(diǎn)?i+1i+1i+1?的風(fēng)的溫差僅取決于兩地的海拔差。具體來說:
- 如果?Ai=Ai+1A_i=A_{i+1}A?i??=A?i+1??,風(fēng)的溫度不變;
- 如果?Ai<Ai+1A_i<A_{i+1}A?i??<A?i+1??,風(fēng)每爬升?111?米,溫度就會(huì)下降?SSS?度;
- 如果?Ai>Ai+1A_i> A_{i+1}A?i??>A?i+1??,風(fēng)每下沉?111?米,溫度就會(huì)升高?TTT?度。
IOI 國的地殼運(yùn)動(dòng)很強(qiáng)烈。你得到了?QQQ?天來地殼運(yùn)動(dòng)的數(shù)據(jù)。在第?jjj?日?(1?j?Q)(1\leqslant j\leqslant Q)(1?j?Q),地點(diǎn)?Lj,Lj+1,…,Rj(1?Lj?Rj?N)L_j, L_j+1, \ldots, R_j (1\leqslant L_j\leqslant R_j\leqslant N)L?j??,L?j??+1,…,R?j??(1?L?j???R?j???N)?的海拔升高了?XjX_jX?j??,注意?XjX_jX?j???可能是負(fù)數(shù)。
你的任務(wù)是,計(jì)算每天地殼運(yùn)動(dòng)后 JOI 君住所的溫度。
輸入格式
第一行有四個(gè)整數(shù)?N,Q,S,TN, Q, S, TN,Q,S,T,用空格分隔。
在接下來的?N+1N+1N+1?行中,第?iii?行?(1?i?N+1)(1\leqslant i\leqslant N+1)(1?i?N+1)?有一個(gè)整數(shù)?Ai?1A_{i-1}A?i?1??。
在接下來的?QQQ?行中,第?jjj?行?(1?j?Q)(1\leqslant j\leqslant Q)(1?j?Q)?有三個(gè)整數(shù)?Lj,Rj,XjL_j, R_j, X_jL?j??,R?j??,X?j??,用空格分隔。
輸入的所有數(shù)的含義見題目描述。
輸出格式
共?QQQ?行,第?jjj?行?(1?j?Q)(1\leqslant j\leqslant Q)(1?j?Q)?有一個(gè)整數(shù),表示第?jjj?日地殼運(yùn)動(dòng)后 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
最初,地點(diǎn)?0,1,2,30,1,2,30,1,2,3?的海拔分別是?0,4,1,80,4,1,80,4,1,8。第一天地殼運(yùn)動(dòng)后,海拔分別為?0,6,3,80,6,3,80,6,3,8。 此時(shí),風(fēng)的溫度分別為?0,?6,0,?50,-6,0,-50,?6,0,?5。
這道題是考試的T3,也是最后一道了(寫完要歇會(huì)兒)
?
乍一眼看上去是個(gè)線段樹的板子,我考場上也就是這么寫的,然后就掛了,話說這場普及難度的考試我竟然只拿了33分(羞澀) 線段樹會(huì)卡常,慘的一批 考完后讀了一邊題,覺得有點(diǎn)不對,又讀了一遍,發(fā)現(xiàn)是個(gè)思維題,O(1)就能跑 因?yàn)榫幼↑c(diǎn)是固定的,而溫度只與高度的差值有關(guān)? 還有一個(gè)要注意的點(diǎn)就是維護(hù)的時(shí)候因?yàn)橐龅絆(1),所以要維護(hù)高度差,操作上本身沒有難度 下面給出代碼: #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("\n");}return 0; }考完后發(fā)現(xiàn)我還有不足(實(shí)在是太菜了)
很多會(huì)的題沒有寫出來
或許這是一次模考,但是卻反映出了很多問題
離考試還有一段時(shí)間,要加油了。
轉(zhuǎn)載于:https://www.cnblogs.com/WWHHTT/p/9677636.html
總結(jié)
- 上一篇: 互联网公司面试必问的mysql题目(下)
- 下一篇: POJ 3694 (tarjan缩点+L