春春是一名道路工程師,負責鋪設一條長度為\(n\)的道路。
鋪設道路的主要工作是填平下陷的地表。整段道路可以看作是\(n\)塊首尾相連的區域,一開始,第\(i\)塊區域下陷的深度為\(d_i\)。
春春每天可以選擇一段連續區間\([l,r]\) ,填充這段區間中的每塊區域,讓其下陷深度減少\(i\)。在選擇區間時,需要保證,區間內的每塊區域在填充前下陷深度均不為\(0\)。
春春希望你能幫他設計一種方案,可以在最短的時間內將整段道路的下陷深度都變為\(0\)。
輸入格式:
輸入檔案包含兩行,第一行包含乙個整數\(n\),表示道路的長度。 第二行包含\(n\)個整數,相鄰兩數間用乙個空格隔開,第\(i\)個整數\(d_i\) 。
輸出格式:
輸出檔案僅包含乙個整數,即最少需要多少天才能完成任務。
6我們先考慮差分,差分前先在序列前後各補上乙個\(0\)4 3 2 5 3 5
0 4 3 2 5 3 5 0差分後可以得到乙個序列
4 -1 -1 3 -2 2 -5其中正數表示道路在這個地方相比前乙個地方凹下去了,負數表示道路在這個地方相比前乙個地方凸起來了。
而我們所選擇的填充序列的開頭一定在凹下去的地方,而結尾在凸起來的地方,這樣才滿足最優。
同時我們還有乙個性質
凹下去的地方和凸起來的地方是一一對應的,即差分序列的和為\(0\)於是我們把查分序列中正的數加起來(即統計有多少個凹下去的地方)的和就是答案。
**
#includeusing namespace std;
const int maxn=100001;
int n,ans,a[maxn];
int main()
noip2018 鋪設道路
退役oier day1t1見ancestor 一道odt板子題都沒人寫?主要 考場 思路 從小到大解決深度 每次解決乙個深度,貢獻就是與上乙個深度之差乘上區間個數 之後就統統split 暴力列舉深度那裡珂以用hash優化暴列舉的常數,懶得搞 複雜度因為每次split會刪掉乙個點,所以是嚴格nlogn...
道路鋪設 NOIP2018
春春是一名道路工程師,負責鋪設一條長度為 n 的道路。鋪設道路的主要工作是填平下陷的地表。整段道路可以看作是 n 塊首尾相連的區 域,一開始,第 i 塊區域下陷的深度為 di 春春每天可以選擇一段連續區間 l,r 填充這段區間中的每塊區域,讓其下陷深 度減少 1。在選擇區間時,需要保證,區間內的每塊...
比賽 NOIP2018 鋪設道路
原題,而且還是ccf自己的 考慮對於一段最長不上公升序列,無論如何都至少有序列第乙個數的貢獻,可以知道,這個貢獻是可以做到且最少的 然後對於序列最後一位,也就是最小的那乙個數,可以和後面序列拼起來的就拼起來,所以後面的序列需要補償的貢獻就是差分 簡化一下,ans sum n max include ...