2023年
時間限制: 1 s
空間限制: 128000 kb
題目等級 : 大師 master
題解檢視執行結果
tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。
tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業額突變得很高或是很低,這就證明公司此時的經營狀況出現了問題。經濟管理學上定義了一種最小波動值來衡量這種情況:
該天的最小波動值 = min
當最小波動值越大時,就說明營業情況越不穩定。
而分析整個公司的從成立到現在營業情況是否穩定,只需要把每一天的最小波動值加起來就可以了。你的任務就是編寫乙個程式幫助tiger來計算這乙個值。
第一天的最小波動值為第一天的營業額。
輸入描述 input description
第一行為正整數n(n<=32767),表示該公司從成立一直到現在的天數,接下來的n行每行有乙個正整數ai(ai<=1000000),表示第i天公司的營業額。
輸出描述 output description
輸出檔案僅有乙個正整數,即每天最小波動值之和,小於231
樣例輸入 sample input
樣例輸出 sample output
資料範圍及提示 data size & hint
結果說明:5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12
思路:裸treap模板;
支援插入,尋找前驅、後繼操作;
每次插入乙個點
然後尋找這個點的前驅和後繼,比較哪個的波動小然後累加
來,上**:
#include #include#include
#include
using
namespace
std;
struct
treenode ;
class
treaptype
while(cget>='
0'&&cget<='9'
)
now*=if_z;
}public
: treaptype()
printf(
"%d\n
",ans);
}void rotato_left(treenode *&now)
void rotato_right(treenode *&now)
void insert(treenode *&now,int
key)
if(now->key==key)
else
if(now->keyelse
if(now->key>key)
now->size=now->left->size+now->right->size+now->weight;
}int predecessor(treenode *&now,int key,treenode *&optimal)
else
}int successor(treenode *&now,int key,treenode *&optimal)
else
}};class
treaptype do_;
intmain()
CodeVS1296 營業額統計
codevs 1296 營業額統計 題目描述 description tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或...
Codevs 1296 營業額統計
原題位址 模板題,就不說了,相信做了前面幾道題就會這個了。就找一找前驅和後繼嘛。注意乙個點 這裡乙個數的 前驅 和 後繼 應包括那個數本身。因為資料中有重複的數,我用bitset判重會re,不知是不是因為毒瘤資料。強上 include include include include include ...
CodeVS1296 營業額統計
tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現一定的波動,當然一定的波動是能夠接受的...