八雲紫的式神八雲藍有一張符卡名為[式神-前鬼後鬼的守護],這張符卡的彈幕為boss從兩側向自機發射大玉,大玉後面跟著一些小玉,形成乙個「v」字型的彈幕。然鵝蘭大人覺得這個彈幕還能再美觀一些,她想讓自己的彈幕能從左向右發射,於是她就開始了行動。
[式神-前鬼後鬼的守護]由 n波彈幕組成,每波彈幕都有乙個落到板底的位置,第i波彈幕的落地位置為xi。
為了讓彈幕能從左到右落地,藍媽需要改變一些彈幕的落地位置,使得改變後的落地位置的座標不遞減,即
。然鵝改變彈幕的方向是很累的,藍媽每將一波彈幕的座標增加或減少1,就會花費一單位的能量,即
藍媽想確定乙個最終的修改方案使得他花費的能量最少,於是她將設計修改方案的任務交給了自己的式神八雲橙。
這可急壞了我們的橙喵,她只是連曼哈頓距離都不會算的年幼式神,你能幫助她完成這個任務嗎?
輸入檔案第一行為乙個正整數n ,意義如題目所示。接下來一行n個正整數,第i個整數代表xi 。
n<=5*10^5,xi<=10^9
輸出乙個整數,為最小消耗的能量值。
7 1 3 2 4 5 3 9
3 將第二波彈幕的落地位置由3改為2 ,花費為1 ,將第六波由3 改為5 ,花費為2 ,總花費為1+2=3 ,形成了乙個不下降序列:1,2,2,4,5,5,9為最優解(不一定為唯一最優解)
bzoj上最短的**就這樣貼出來了
首先我們考慮已經維護好的乙個區間
我們考慮新加入乙個小於最大值的點(大於最大值直接加入)
就像這樣
我們可以花費ab
s(va
lmax
−val
a)a bs
(val
max−
vala
)的代價把a和max變成這區間中的任意乙個數,所以也就實現了維護
所以我們其實就相當於是把max變成了a,並付出了ab
s(va
lmax
−val
a)a bs
(val
max−
vala
)的代價
這樣之後我們又可以從當前的max開始維護
這樣舉個栗子:
新加入的點小於原來的a怎麼辦?霧
我們可以用ab
s(va
lmax
(c)−
valh
) abs
(val
max(
c)−v
alh)
的代價把c和h變成這區間中的任意乙個數,在這裡我們可以直接將就上一次剩下的a,其實也不影響,所以c和h又相當於變成了兩個h
可以證明一定是可以有一種方式使得單調不減
然後就寫一段小小的**
非常方便快捷
#include
using
namespace
std;
priority_queue q;
int n,x;
long
long ans=0;
int main()
}printf("%lld",ans);
}
5 05 C語言 函式
函式是什麼?常見的庫函式都有哪些?自定義函式的一般形式是什麼?形參和實參是什麼?函式的呼叫如何實現?作業 1 動態輸入三個整數,寫乙個函式,返回最大值並輸出該值 intgetmax intx,inty,intz 2 寫乙個函式,返回輸入整數 大於 999小於 10000 的每位的數字之和。intge...
505 動態區間異或和
給定乙個由n個正整數組成的序列 兩種操作 1 x y 表示將 axax的值改為y 2 x y 表示詢問區間 x,y 的異或和 第一行,兩個正整數n和m,用空格隔開。第二行,n個正整數表示序列。以下m行,每行三個數,表示乙個操作,格式如題面。對於每個操作2詢問佔一行乙個整數。10101 97810 9...
505 動態區間異或和
505.動態區間異或和 統計描述 提交自定義測試 題目描述 給定乙個由n個正整數組成的序列 兩種操作 1 x y 表示將 axax的值改為y 2 x y 表示詢問區間 x,y 的異或和 輸入描述 第一行,兩個正整數n和m,用空格隔開。第二行,n個正整數表示序列。以下m行,每行三個數,表示乙個操作,格...