日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[BZOJ 1588] [HNOI 2002] 营业额统计

發(fā)布時間:2023/12/2 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BZOJ 1588] [HNOI 2002] 营业额统计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1588: [HNOI2002]營業(yè)額統(tǒng)計

Time Limit:?5 SecMemory Limit:?162 MB

Description

營業(yè)額統(tǒng)計 Tiger最近被公司升任為營業(yè)部經(jīng)理,他上任后接受公司交給的第一項任務(wù)便是統(tǒng)計并分析公司成立以來的營業(yè)情況。 Tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業(yè)額。分析營業(yè)情況是一項相當復(fù)雜的工作。由于節(jié)假日,大減價或者是其他情況的時候,營業(yè)額會出現(xiàn)一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業(yè)額突變得很高或是很低,這就證明公司此時的經(jīng)營狀況出現(xiàn)了問題。經(jīng)濟管理學上定義了一種最小波動值來衡量這種情況: 該天的最小波動值 當最小波動值越大時,就說明營業(yè)情況越不穩(wěn)定。 而分析整個公司的從成立到現(xiàn)在營業(yè)情況是否穩(wěn)定,只需要把每一天的最小波動值加起來就可以了。你的任務(wù)就是編寫一個程序幫助Tiger來計算這一個值。 第一天的最小波動值為第一天的營業(yè)額。 ? 輸入輸出要求

Input

第一行為正整數(shù) ,表示該公司從成立一直到現(xiàn)在的天數(shù),接下來的n行每行有一個整數(shù)(有可能有負數(shù)) ,表示第i天公司的營業(yè)額。

Output

輸出文件僅有一個正整數(shù),即Sigma(每天最小的波動值) 。結(jié)果小于2^31 。

Sample Input

6
5
1
2
5
4
6

Sample Output

12

HINT

?

結(jié)果說明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12


此題數(shù)據(jù)有問題,詳見討論版http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1588

【題解】

用平衡樹來維護插入等操作即可。

平衡樹第二題 AC

事實證明,zig,zag分開來寫會更快=-=

1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=40010; 4 int fa[N],ch[N][2],root,k[N],ind=1; 5 void zig(int x) { 6 int y=fa[x],z=fa[y]; 7 fa[y]=x; 8 fa[x]=z; 9 ch[y][0]=ch[x][1],fa[ch[x][1]]=y,ch[x][1]=y; 10 if (y==ch[z][0]) ch[z][0]=x; 11 else ch[z][1]=x; 12 //size[y]=size[ch[y][0]]+size[ch[y][1]]+1; 13 } 14 void zag(int x) { 15 int y=fa[x],z=fa[y]; 16 fa[y]=x,fa[x]=z; 17 ch[y][1]=ch[x][0],fa[ch[x][0]]=y,ch[x][0]=y; 18 if (y==ch[z][0]) ch[z][0]=x; 19 else ch[z][1]=x; 20 //size[y]=size[ch[y][0]]+size[ch[y][1]]+1; 21 } 22 void splay(int x,int s) { 23 while (fa[x]!=s) { 24 int y=fa[x],z=fa[y]; 25 if (z==s) { 26 if (x==ch[y][0]) zig(x); 27 else zag(x); 28 break; 29 } 30 if (y==ch[z][0]) { 31 if (x==ch[y][0]) zig(y),zig(x); 32 else zag(x),zig(x); 33 } 34 else { 35 if (x==ch[y][1]) zag(y),zag(x); 36 else zig(x),zag(x); 37 } 38 } 39 //size[x]=size[ch[x][0]]+size[ch[x][1]]+1; 40 if (s==0) root=x; 41 } 42 inline void newnode(int &x,int fax,int key) { 43 x=++ind; 44 ch[x][0]=ch[x][1]=0; 45 fa[x]=fax; 46 k[x]=key; 47 } 48 inline int search(int w) { 49 int p,x=root; 50 while(x) { 51 p=x; 52 if(k[x]>w) x=ch[x][0]; 53 else x=ch[x][1]; 54 } 55 return p; 56 } 57 inline void ins(int w){ 58 if (root==0) { 59 newnode(root,0,w); 60 return ; 61 } 62 int i=search(w); 63 if(w<k[i]) newnode(ch[i][0],i,w); 64 else newnode(ch[i][1],i,w); 65 splay(ind,0); 66 } 67 inline int pre(int x) { 68 int tmp=ch[x][0]; 69 while(ch[tmp][1]) tmp=ch[tmp][1]; 70 return k[tmp]; 71 } 72 inline int suc(int x) { 73 int tmp=ch[x][1]; 74 while(ch[tmp][0]) tmp=ch[tmp][0]; 75 return k[tmp]; 76 } 77 int main() { 78 int n,t,ans=0; 79 scanf("%d%d",&n,&t); 80 root=1;k[root]=t; 81 ch[root][0]=ch[root][1]=0; 82 fa[root]=0;//printf("hhh"); 83 ans=t;ins(2100000); 84 ins(-2100000); 85 for (int i=2;i<=n;++i) { 86 if(scanf("%d",&t)==EOF) t=0; 87 ins(t); 88 int a=pre(root),b=suc(root); 89 ans+=min(t-a,b-t); 90 } 91 printf("%d\n",ans); 92 return 0; 93 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/TonyNeal/p/bzoj1588.html

總結(jié)

以上是生活随笔為你收集整理的[BZOJ 1588] [HNOI 2002] 营业额统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。