bzoj1588 [HNOI2002]營業額統計

1588: [HNOI2002]營業額統計

Time Limit:?5 Sec??Memory Limit:?162 MB
Submit:?17931??Solved:?7391
[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

分析:splay裸題,每次找前驅和后繼,找前驅的方法是在左子樹中找最大的數(一直往右跳),后繼就是在右子樹中找最小的數(往左跳).需要注意的是每次插入完一個數都要將它翻到上面去.并且要更新根節點!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 40010;struct node
{int fa,left,right,v;
}e[maxn];int n,ans,Time,t,root = 1;
bool flag = true;void turnr(int x)
{int y = e[x].fa;int z = e[y].fa;e[y].left = e[x].right;if (e[x].right != -1)e[e[x].right].fa = y;e[x].fa = z;if (z != -1){if (e[z].left == y)e[z].left = x;elsee[z].right = x;}e[x].right = y;e[y].fa = x;
}void turnl(int x)
{int y = e[x].fa;int z = e[y].fa;e[y].right = e[x].left;if (e[x].left != -1)e[e[x].left].fa = y;e[x].fa = z;if (z != -1){if (e[z].left == y)e[z].left = x;elsee[z].right = x;}e[x].left = y;e[y].fa = x;
}void splay(int x)
{while (e[x].fa != -1){int y = e[x].fa;int z = e[y].fa;if (z == -1){if (x == e[y].left)turnr(x);elseturnl(x);}else{if (e[z].left == y && e[y].left == x){turnr(y);turnr(x);}else{if (e[z].right == y && e[y].right == x){turnl(y);turnl(x);}else{if (e[z].left == y && e[y].right == x){turnl(x);turnr(x);}else{turnr(x);turnl(x);}}}}}root = x;
}void insert(int x,int y)
{if (x == e[y].v){flag = false;splay(y);return;}if (x < e[y].v){if (e[y].left == -1){e[y].left = ++Time;e[Time].left = e[Time].right = -1;e[Time].fa = y;e[Time].v = x;}elseinsert(x,e[y].left);}else{if (e[y].right == -1){e[y].right = ++Time;e[Time].left = e[Time].right = -1;e[Time].fa = y;e[Time].v = x;}elseinsert(x,e[y].right);}
}int findl(int x)
{int y = e[x].left;if (y == -1)return y;while (e[y].right != -1)y = e[y].right;return y;
}int findr(int x)
{int y = e[x].right;if (y == -1)return y;while (e[y].left != -1)y = e[y].left;return y;
}void solve(int x)
{flag = true;insert(x,root);if (!flag)return;splay(Time);int p = findl(Time),q = findr(Time);int temp = 0x7fffffff;if (p != -1)temp = min(temp,abs(x - e[p].v));if (q != -1)temp = min(temp,abs(x - e[q].v));if (temp != 0x7fffffff)ans += temp;
}int main()
{scanf("%d",&n);scanf("%d",&t);ans += t;e[++Time].fa = -1;e[Time].left = -1;e[Time].right = -1;e[Time].v = t;for (int i = 2; i <= n; i++){scanf("%d",&t);solve(t);}printf("%d\n",ans);return 0;
}

?

轉載于:https://www.cnblogs.com/zbtrs/p/8231725.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/369968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/369968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/369968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python管道通信_Python進程通信之匿名管道實例講解

匿名管道管道是一個單向通道,有點類似共享內存緩存.管道有兩端,包括輸入端和輸出端.對于一個進程的而言,它只能看到管道一端,即要么是輸入端要么是輸出端.os.pipe()返回2個文件描述符(r, w),表示可讀的和可寫的.示例代碼如下:復制代碼 代碼如下:#!/usr/bin/pythonimport timeim…

css3中的box-sizing屬性的使用

box-sizing屬性用來定義元素的width和height所表示的區域,該屬性一般有三種值&#xff1a;content-box、border-box、inherit。 其中inherit表示box-sizing的值應該從父元素繼承。 content-box和border-box的主要區別就是元素的width和height的值包不包括border、padding這兩…

ES6擴展運算符...進行的數組刪除

今天寫了按照React小書寫了Reducer&#xff0c;發現基礎真是太重要了&#xff0c;所有關于上層建筑的細節都需要回到下層細節中去尋找&#xff0c;而且現在的基礎也由ES3變成了ES6了。 const ADD_USER "ADD_USER" const DELETE_USER "DELETE_USER" const…

中南大學在線考試答案計算機基礎,中南大學《計算機基礎》在線考試題庫(267題)(有答案).doc...

中南大學《計算機基礎》在線考試題庫(267題)(有答案).doc 計算機基礎01 總共89題共100分 一. 單選題 (共35題,共35分) 1. 域名服務器DNS的主要功能是( )。 (1分) A.通過請求及回答獲取主機和網絡相關的信息 B.查詢主機的MAC地址 C.為主機自動命名 D.合理分配IP地址 ★標準答案&…

自動化的OSGi測試運行器

在我的團隊成員中&#xff0c;我以忘記維護&#xff08;JUnit&#xff09;測試套件而聞名。 我只是無法為此付出額外的手動為套件添加測試的步驟。 幸運的是&#xff0c;有連續的集成服務器通過命名模式收集測試。 如果我介紹的一項孤立測試失敗了&#xff0c;那么它會脫穎而出…

php post請求后端拿不到值_PHP Post獲取不到非表單數據的問題解決辦法

問題描述在使用vue-axios向后端post數據時&#xff0c;PHP端獲取不到post的數據。問題解決修改php.ini配置找到php.ini配置文件&#xff0c;查找enable_post_data_reading變量&#xff0c;修改為打開狀態&#xff0c;注釋掉句前分好; Whether PHP will read the POST data.; Th…

CSS制作簡單loading動畫

曾經以為&#xff0c;loading的制作需要一些比較高深的web動畫技術&#xff0c;后來發現大多數loading都可以用“障眼法”做出來。比如一個旋轉的圓圈&#xff0c;并不都是將gif圖放進去&#xff0c;有些就是畫個靜止圖像&#xff0c;然后讓它旋轉就完了。gif圖也可以&#xff…

機器學習:多變量線性回歸

************************************** 注&#xff1a;本系列博客是博主學習Stanford大學 Andrew Ng 教授的《機器學習》課程筆記。博主深感學過課程后&#xff0c;不進行總結非常easy遺忘&#xff0c;依據課程加上自己對不明確問題的補充遂有此系列博客。本系列博客包含線性…

Java對象復活

總覽 收集覆蓋了finalize&#xff08;&#xff09;的對象之后&#xff0c;將其添加到終結處理隊列中&#xff0c;以在調用每個對象的finalize&#xff08;&#xff09;方法之后進行清理。 如果您復活該物體&#xff0c;會發生什么&#xff1f; 何時定稿&#xff1f; finalize方…

經過路由無法找到計算機,電腦無法啟動服務提示系統找不到指定的路徑(圖)

原標題&#xff1a;"電腦無法啟動服務提示系統找不到指定的路徑"相關電腦問題教程分享。 - 來源:191路由網。眾所周知&#xff0c;使用電腦的時候需要啟動一些服務才能使用相關的功能&#xff0c;但是如果出現無法啟動服務項&#xff0c;并且提示“錯誤3&#xff1a;…

有關域索引錯誤產生的原因及解決辦法

1說明 數據庫錯誤ORA-29861:域索引標記為LOADING/FAILED/UNUSABLE&#xff0c;其錯誤原因及解決辦法&#xff0c;根據ORACLE官方文檔的說法如下&#xff1a; // *Cause: An attempt has been made to access a domain index that is// being built or is marked faile…

詳細解讀css中的浮動以及清除浮動的方法

對于前端初學者來說&#xff0c;css浮動部分的知識是一塊比較難以理解的部分&#xff0c;下面我將把我學習過程中的心得分享給大家。 導讀&#xff1a; 1.css塊級元素講解 2.css中浮動是如何產生的 3.出現浮動后&#xff0c;如何清除浮動&#xff08;本文將涉及到多種清除浮動…

微信多開txt_電腦版微信怎么雙開、多開

新建一個txt文本文件&#xff0c;在文件中寫入如下代碼&#xff1a;echo offstart /d "C:\Program Files (x86)\Tencent\WeChat\" WeChat.exestart /d "C:\Program Files (x86)\Tencent\WeChat\" WeChat.exeexit保存文本文件。這里需要注意的是&#xff1a…

java 基礎--隨筆

---恢復內容開始--- java 對大小寫敏感。 java沒有任何無符號類型&#xff08;unsigned&#xff09;。 C/C是編譯型語言&#xff0c;java是解釋性語言。 JAVA編譯過程同C/C 的 編譯有些不同。當C編譯器編譯生成一個對象的代碼時&#xff0c;該代碼是為在某一特定硬件平臺運行而…

多源計算機培訓,多源數據匯聚的多流形學習算法研究

摘要&#xff1a;隨著信息技術和互聯網的飛速發展,人們可以從多個信息源獲得數據,即多源數據.由于多源數據具有類型多樣,尺度不統一等特點,對多源數據進行匯聚并提取有效信息是機器學習和模式識別等領域研究的熱點.由于多流形學習能夠有效地揭示復雜數據中的內在結構,因此本文主…

Ubuntu 16.04 安裝mysql5.7

技術更新換代&#xff0c;數據庫也不斷更新&#xff0c;需要不斷努力學習&#xff0c;下面就是如何在 ubuntu中安裝 mysql。 廢話不多說&#xff0c;上來就是干 一、安裝mysql 5.7 sudo apt-get update sudo apt-get install mysql-server 中間會提示您輸出root 密碼&#xff…

CSS多列布局(實例)

前言 一列布局二列布局三列布局 1 一列布局 一列布局&#xff1a; HTML部分 <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>一列布局</title> </head> <body> <div class"head">…

阿帕奇駱駝備忘單

輪詢一個空目錄&#xff08;并發送一個空消息&#xff0c;正文為空&#xff09;&#xff1a; from(file://temp?sendEmptyMessageWhenIdletrue)停止路線&#xff1a; .process(new Processor() {public void process(Exchange exchange) throws Exception {getContext().stopR…

js中雙感嘆號_JavaScript中雙嘆號(!!)作用

經常看到這樣的例子&#xff1a;vara&#xff1b;var b!!a;a默認是undefined。!a是true&#xff0c;!!a則是false&#xff0c;所以b的值是false&#xff0c;而不再是undefined&#xff0c;也非其它值&#xff0c;主要是為后續判斷提供便利。!!一般用來將后面的表達式強制轉換為…

大頭貼計算機教程,推薦!自家電腦也能拍大頭貼的秘密

您可能感興趣的話題&#xff1a;美圖拍拍核心提示&#xff1a;一直都超愛拍大頭貼&#xff0c;喜歡每張都能換不同的框框&#xff1b;喜歡可以直接看到效果&#xff0c;做出滿意的動作&#xff1b;喜歡將大頭貼和朋友們分享……不過夏日炎炎的&#xff0c;出門太麻煩&#xff0…