BZOJ 1588: [HNOI2002]營業額統計

来源:https://www.cnblogs.com/Hammer-cwz-77/archive/2018/03/29/8672747.html
-Advertisement-
Play Games

1588: [HNOI2002]營業額統計 Description 營業額統計 Tiger最近被公司升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。 Tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日 ...


1588: [HNOI2002]營業額統計

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 18547  Solved: 7748
[Submit][Status][Discuss]

Description

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

Input

第一行為正整數 ,表示該公司從成立一直到現在的天數,接下來的n行每行有一個整數(有可能有負數) ,表示第i 天公司的營業額。 天數n<=32767, 每天的營業額ai <= 1,000,000。 最後結果T<=2^31

 

Output

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

Sample Input

6
5
1
2
5
4
6

Sample Output

12

HINT

 

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


該題數據bug已修複.----2016.5.15

 

Source

  1 #include<algorithm>
  2 #include<cstdio>
  3 #include<iostream>
  4 #include<cstdlib>
  5 #include<cmath>
  6 using namespace std;
  7  
  8 const int maxn=32767;
  9 typedef long long ll;
 10  
 11 struct node{
 12     int d,n,c,f,son[2];//d?a?μ,f?a???×μ?±ào?,c?a????μ??úμ?êy,n?aí??μμ??úμ???êy 
 13 }t[41000];
 14 int len,root;
 15  
 16 inline void update(int x)//?üD?x?ù????μ??úμ?êy 
 17 {
 18     int lc=t[x].son[0],rc=t[x].son[1];
 19     t[x].c=t[lc].c+t[rc].c+t[x].n;
 20 }
 21  
 22 inline void add(int d,int f)//ìí?ó?μ?adμ?μ?,è?f?a???×,í?ê±,fò2è??ü?ao¢×ó 
 23 {
 24     len++;
 25     t[len].d=d;
 26     t[len].n=1;
 27     t[len].c=1;
 28     t[len].f=f;
 29     if(d<t[f].d)
 30         t[f].son[0]=len;
 31     else
 32         t[f].son[1]=len;
 33     t[len].son[0]=t[len].son[1]=0;
 34 }
 35  
 36 inline void rotate(int x,int w)//×óDy(x,0)?ò??óòDy(x,1) 
 37 {
 38     int f=t[x].f,ff=t[f].f;//x?úDy×a???°,òaè·?¨xμ????×foíòˉòˉff
 39     //??à′?¨á¢1??μ 
 40     int r,R;//r′ú±í?ù±2,R±íê???±2 
 41     //óD4????é?:?òx,?òμ??ù×ó,?òμ????×,?òμ?òˉòˉ 
 42     r=t[x].son[w];R=f;//xμ??ù×ó->×?±?μ±D??ù×ó 
 43     t[R].son[1-w]=r;
 44     if(r!=0)
 45         t[r].f=R;
 46      
 47     r=x;R=ff;//x->×?±?μ±D??ù×ó 
 48     if(t[R].son[0]==f)
 49         t[R].son[0]=r;
 50     else   
 51         t[R].son[1]=r;
 52     t[r].f=R;
 53      
 54     r=f;R=x;//xμ????×->×?±?μ±D??ù×ó 
 55     t[R].son[w]=r;
 56     t[r].f=R;
 57      
 58     update(f);//?è?üD?′|óú??2?μ?μ?f 
 59     update(x);//?ù?üD?é?2?μ?x 
 60 }
 61  
 62 inline void splay(int x,int rt)//??oˉêy1|?üê??aá?è?x±?3értμ?o¢×ó(×óóò???éò?) 
 63 {
 64     while(t[x].f!=rt)//è?1?xμ?òˉòˉê?rt,???′x??DèòaDy×aò?′?(?àμ±óúì?ò?2?) 
 65     {
 66         int f=t[x].f,ff=t[f].f;
 67         if(ff==rt)
 68         {
 69             if(t[f].son[0]==x)
 70                 rotate(x,1);
 71             else
 72                 rotate(x,0);
 73         }
 74         else
 75         {
 76             if(t[ff].son[0]==f&&t[f].son[0]==x)
 77             {
 78                 rotate(f,1);rotate(x,1);
 79             }
 80             else if(t[ff].son[1]==f&&t[f].son[1]==x)
 81             {
 82                 rotate(f,0);rotate(x,0);
 83             }
 84             else if(t[ff].son[0]==f&&t[f].son[1]==x)
 85             {
 86                 rotate(x,0);rotate(x,1);
 87             }
 88             else if(t[ff].son[1]==f&&t[f].son[0]==x)
 89             {
 90                 rotate(x,1);rotate(x,0);
 91             }
 92         }
 93     }
 94     if(rt==0)
 95         root=x;
 96 }
 97  
 98 inline int findip(int d)//?ò?μ?adμ??úμ?μ??·,213?:è?1?2?′??úd,óD?é?üê??ó?üdμ?(?ò′ó?òD?)
 99 {
100     int x=root;
101     while(t[x].d!=d)
102     {
103         if(d<t[x].d)
104         {
105             if(t[x].son[0]==0)
106                 break;
107             else
108                 x=t[x].son[0];
109         }
110         else
111         {
112             if(t[x].son[1]==0)
113                 break;
114             else
115                 x=t[x].son[1];
116         }
117     }
118     return x;
119 }
120  
121 inline void insert(int d)//2?è?êy?μ?adμ?ò????úμ? 
122 {
123     if(root==0)
124     {
125         add(d,0);
126         root=len;
127         return ;
128     }
129     int x=findip(d);
130     if(t[x].d==d)
131     {
132         t[x].n++;
133         update(x);
134         splay(x,0);
135     }
136     else
137     {
138         add(d,x);
139         update(x);
140         splay(len,0);
141     }
142 }
143  
144 inline void del(int d)//é?3yêy?μ?adμ?ò????úμ? 
145 {
146     int x=findip(d);
147     splay(x,0);//?òè?,2¢?òè?yμ±ê÷?ù 
148     if(t[x].n>1)//?à??éí·Y,?í2?ó?é?μ? 
149     {
150         t[x].n--;
151         update(x);
152         return ;
153     }
154     if(t[x].son[0]==0&&t[x].son[1]==0)
155     {
156         root=0;
157         len=0;
158         return ;
159     }
160     else if(t[x].son[0]==0&&t[x].son[1]!=0)
161     {
162         root=t[x].son[1];
163         t[root].f=0;
164     }
165     else if(t[x].son[0]!=0&&t[x].son[1]==0)
166     {
167         root=t[x].son[0];
168         t[root].f=0;
169     }
170     else
171     {
172         int p=t[x].son[0];
173         while(t[p].son[1]!=0)
174             p=t[p].son[1];
175         splay(p,x);
176          
177         int r=t[x].son[1],R=p;
178          
179         t[R].son[1]=r;
180         t[r].f=R;
181          
182         root=R;
183         t[root].f=0;
184         update(R);
185     }
186 }
187  
188 inline int findrank(int d)//?ò???? 
189 {
190     int x=findip(d);
191     splay(x,0);
192     return t[t[x].son[0]].c+1;
193 }
194  
195 inline int findshuzhi(int k)//?ò?????akμ??μ 
196 {
197     int x=root;
198     while(true)
199     {
200         int lc=t[x].son[0],rc=t[x].son[1];
201         if(k<=t[lc].c) 
202             x=lc;//è¥×óo¢×ó2é?ò 
203         else if(k>t[lc].c+t[x].n)
204         {
205             k-=t[lc].c+t[x].n;
206             x=rc;
207         }//è¥óòo¢×ó2é?ò 
208         else
209             break;//?íê??? 
210     }
211     splay(x,0);
212     return x;
213 }
214  
215 inline int findqianqu(int d)//?ò?°?y 
216 {
217     int x=findip(d);
218     splay(x,0);
219     if(d<=t[x].d&&t[x].son[0]!=0) 
220     {
221         x=t[x].son[0];
222         while(t[x].son[1]!=0)
223             x=t[x].son[1];
224     }
225     if(t[x].d>=d)//è?1?ê?if(t[x].d>d)?ò?òμ?μ?ê?:D?óúμèóúdμ??°?y 
226         x=0;
227     return x;
228 }
229  
230 inline int findhouji(int d)//?òoó?ì 
231 {
232     int x=findip(d);
233     splay(x,0);
234     if(t[x].d<=d&&t[x].son[1]!=0)
235     {
236         x=t[x].son[1];
237         while(t[x].son[0]!=0)
238             x=t[x].son[0];
239     }
240     if(t[x].d<=d)
241         x=0;
242     return x;
243 }
244  
245 int main()
246 {
247     int n;
248     ll ans=0;
249     scanf("%d",&n);
250     len=0;
251     root=0;
252     for(int i=1;i<=n;i++)
253     {
254         int x;
255         scanf("%d",&x);
256         insert(x);
257         if(i==1)
258         {
259             ans+=x;
260             continue;
261         }
262         int qq=findqianqu(x),hj=findhouji(x),id=findip(x);
263         if(t[id].n>1)continue;
264         if(qq==0)
265         {
266             ans+=abs(x-t[hj].d);
267         }
268         else if(hj==0)
269         {
270             ans+=abs(x-t[qq].d);
271         }
272         else
273         {
274             ans+=min(abs(x-t[qq].d),abs(x-t[hj].d));
275         }
276     }
277     printf("%lld\n",ans);
278     return 0;
279 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 組合模式為了描述分支包含關係,也就是我們說的樹形關係,其對象分為枝和葉,每一枝可包含枝和葉,直到全部為葉節點。我們對枝和葉進行行為抽象,可認為枝和葉都是Component,而葉是最小的操作單元,其下不存在枝和葉,而枝作為Composite裡面存有其下枝和葉的組件列表。 作用 將對象組合成樹形結構以表 ...
  • 簡單來說就是暫停的意思,一般在LINUX編程時會用到,等待接收信號,才會重新運行 。 在進行C/C++編程的時候,在運行程式查看輸出效果時,會出現視窗閃一下就關閉的情況。 在C語言中一般通過添加getchar(); 在C++中一般在main函數中的return之前添加system("pause"); ...
  • ssh實現遠程登陸一般有兩種方式,一種就是用戶密碼登陸,另一種是密鑰登陸(當然預設是要服務端打開ssh服務)。 我這裡使用這兩種方法操作一下遠程登陸,測試客戶端是本機的root與jeff用戶,遠程連接我的阿裡雲伺服器。 用戶及密碼登陸 root為服務端用戶,輸入帳號密碼後,即登陸阿裡雲伺服器。 密鑰 ...
  • 很早之前學過python2.7版本,後來準備考研好久沒用了,最近先瀏覽一遍Python基礎教程,總結一下前七章,總體作為一個回憶引子 python中的一切皆為對象,每個對象都有兩種屬性,第一種是用戶定義的屬性;第二種是和對象有關的python內部屬性通常以__attr__的形式出現 1.幾個常用方法 ...
  • 作者:匿名用戶鏈接:https://www.zhihu.com/question/52992079/answer/156294774來源:知乎著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 (sklearn官方指南:Choosing the right estimator) 0 ...
  • 一篇文章主要是關於整體架構以及用到的軟體的一些介紹,這一篇文章是對各個軟體的使用介紹,當然這裡主要是關於架構中我們agent的實現用到的內容 關於zookeeper+kafka 我們需要先把兩者啟動,先啟動zookeeper,再啟動kafka啟動ZooKeeper:./bin/zkServer.sh ...
  • 再次重申學習的是某位THU大神,網址貼下 http://nbviewer.jupyter.org/github/lijin THU/notes python/tree/master/ 只貼了我不太熟悉的 適合有其他編程語言基礎的看 chat 2 part2 some function about n ...
  • 在命令視窗執行java文件時,提示找不到或無法載入主類 以前寫java代碼的時候,都是在Eclipse或者IDEA等集成開發工具上進行,所以編譯和測試代碼的時候都是一鍵執行,其中的原理簡單來說,就是先通過javac命令,將.java文件編譯成.class文件,然後再通過java命令去執行.class ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...