UVa1232 Skyline

出處:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3673

依序將建築物加入地平線,把新加入建築物的高度大於等於舊的建築物高度的長度加總就是答案

例如:

3

5 11 3 (最舊) 5到10(到11的左邊界為止)增加高度為3的建築物,長度為10-5+1=6

1 10 1 1到4(到5的左邊界為止)增加高度為1的建築物,長度為4-1+1=4

3 13 2 3到4與11到12增加高度為2的建築物,長度為(2-1+1)+(2-1+1)=4 ,答案為14


解題策略:segment tree,設定元素值並更新區間的最大值與最小值,最大值與最小值相同表示整個區間都是相同值。

若區間最大值與最小值不相同,且設定值大於等於區間最小值,表示該區間有可能有需要修改的值,遞迴進去子區間,找到最大值與最小值相同且最大值小於等於設定值,累加這個區間長度到答案

完整程式碼