//問最大值
//q a b 詢問[a,b]中最大值
//c a b 將a點值改為b
#includeusing namespace std;
#pragma warning(disable:4996)
#define maxn 100005
#define ll long long
ll chushi[maxn], sum[maxn * 4];//記得開4倍空間
void pushup(int rt)
void build(int l, int r, int rt)
int mid = (l + r) / 2;//遞迴建樹——左子樹,右子樹
build(l, mid, 2 * rt);
build(mid + 1, r, 2 * rt + 1);
pushup(rt);//更新父親節點的值
}int qurry(int x, int y, int l, int r, int rt)
//pushdown(rt, r - l + 1);
int mid = (l + r) / 2;
int ret = 0;
int ret1 = 0;
//cout << l << " " << r << " " << mid << endl;
if (x <= mid) ret = max(ret, qurry(x, y, l, mid, 2 * rt));//如果這個區間的左兒子和目標區間有交集那麼搜尋左兒子
if (y > mid) ret1 = max(ret1, qurry(x, y, mid + 1, r, 2 * rt + 1));//如果這個區間的右兒子和目標區間有交集那麼搜尋右兒子
return max(ret1, ret);
}void update(int x, int c, int l, int r, int rt)
int mid = (l + r) / 2;
if (x <= mid)update(x, c, l, mid, 2 * rt);
else update(x, c, mid + 1, r, 2 * rt + 1);
pushup(rt);
}int main()
}
線段樹 最大數 單點修改 求區間最大值
題目鏈結 題意 給定乙個正整數數列 a1,a2,an,每乙個數都在 0 p 1 之間。可以對這列數進行兩種操作 新增操作 向序列後新增乙個數,序列長度變成 n 1 詢問操作 詢問這個序列中最後 l 個數中最大的數是多少。程式執行的最開始,整數序列為空。寫乙個程式,讀入操作的序列,並輸出詢問操作的答案...
線段樹 區間修改 最大值
最大值 區間修改 總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 在n 1 n 100000 個數a1 an組成的序列上進行m 1 m 100000 次操作,操作有兩種 1 1 lr c 表示把a l 到a r 增加c c的絕對值不超過10000 2 ...
HDU1854 線段樹 單點修改區間最大值
很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。input 本題目包含多組測試,請處理到檔案結束。在每個測試的第一行,有兩個...