treap 營業額統計

2021-10-02 15:31:58 字數 1610 閱讀 3548

tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。

tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。

分析營業情況是一項相當複雜的工作。

由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業額突變得很高或是很低,這就證明公司此時的經營狀況出現了問題。

經濟管理學上定義了一種最小波動值來衡量這種情況。

設第i天的營業額為ai,則第i天(i≥2)的最小波動值fi被定義為:

f i=

min1

≤j

ai−a

j∣

f_i=min_1≤jfi

​=mi

n1​≤

jai​−

aj​∣

當最小波動值越大時,就說明營業情況越不穩定。

而分析整個公司的從成立到現在營業情況是否穩定,只需要把每一天的最小波動值加起來就可以了。

你的任務就是編寫乙個程式幫助tiger來計算這乙個值。

第一天的最小波動值為第一天的營業額a1。

輸入格式

第一行為正整數n,表示該公司從成立一直到現在的天數。

接下來的n行每行有乙個整數ai(有可能有負數) ,表示第i天公司的營業額。

輸出格式

輸出乙個正整數,表示最小波動值的和。

資料範圍

n

≤32767,a

i≤

106n≤32767,a_i≤106

n≤3276

7,ai

​≤10

6輸入樣例:65

1254

6輸出樣例:

12樣例解釋

在樣例中,5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12。

#include

#define int long long

using

namespace std;

const

int n=

33010

,inf=

1e7;

struct nodetr[n]

;int root,idx;

intget_node

(int key)

void

build()

intzig

(int

&p)int

zag(

int&p)

void

insert

(int

&p,int key)

else

}int

get_prev

(int p,

int key)

return

max(tr[p]

.key,

get_prev

(tr[p]

.r,key));

}int

get_next

(int p,

int key)

signed

main()

cout<}

營業額統計 Treap

tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的...

HNOI2002 營業額統計 Treap

hnoi2002 營業額統計 題目大意 給你一串n數序列,對於每乙個剛輸入的數a,找到乙個前面的數k,使得 a k 最小。注釋 n 32767,ai 10 6 想法 剛學treap。這道算treap的練習題裡吧,對於新手來講還是挺有意義的。首先,我們先來講一講treap是個什麼東西。在這之前,我們宣...

營業額統計

給出乙個 n 個數的數列,定義 f i min i ge j 求 sum f i 題目就要我們求在這個數之前並且和這個數的差最小的數,我們考慮這個數必定出現在當前 a i 的前驅或後繼中。所以我們可以用平衡樹維護這個數列,每次求一下前驅和後繼,注意這裡可以相等,再把原數插入進去即可。includeu...