題意: 原始序列全為w, 找到最左邊的>=a的位置, 將該位置的值減去a,答案為該位置, 如果找不到符合要求的位置, 輸出-1。
該題利用線段樹遞歸特點來求其最左邊的大於等於a的位置。
線段樹遞歸的特點是從祖先結點開始自頂向下遞歸,訪問各個元素的順序一定是從左到右, 並且在遞歸之後可以順便維護區間結點的值。
利用這個特點, 我們可以直接查詢到>=a的最左邊的位置。該元素變成v - a, 然後順便維護改變了的值。 所以該題就成了維護區間最大值的線段樹題目。
細節參見代碼:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include