poj 3467 線段樹成段更新

2021-05-27 20:06:25 字數 1355 閱讀 6116

題意: 略

分析: 可設一另設兩個域sum 和d分別表示該區間的當前和與該區間的每個元素的增量,之後維護線段樹即可! 再次感慨**能力、、、、

#include using namespace std;

__int64 sum1;

int a[100005];

struct node

tree[1000000];

void creat (int root, int left, int right)

int mid = (left+right)/2;

creat(2*root, left,mid);

creat(2*root+1, mid+1, right);

tree[root].sum = tree[2*root].sum + tree[2*root+1].sum;

}void insert (int root, int left, int right, int x)

tree[root].sum += x*(right -left+1);

int mid = (tree[root].left+ tree[root].right)/2;

if (left > mid)

insert(2*root+1,left, right, x);

else if (right <= mid)

insert(2*root, left, right, x);

else }

void search(int root, int left, int right)

if (tree[root].d)

int mid = (tree[root].left + tree[root].right)/2;

if (left > mid)

search(2*root+1, left, right);

else if (right <= mid)

search(2*root,left, right);

else }

void print(int root)

printf ("%d %d %i64d\n", tree[root].left , tree[root].right , tree[root].sum);

print(2*root);

print(2*root+1);

}int main ()

insert (1, l, r, x);

}else

sum1 = 0;

search(1, l, r);

printf ("%i64d\n",sum1);}}

return 0;

}

POJ 3468 線段樹成段更新

題意就是給了一串行的數.然後不斷的問一段的值或者在一段上每個數加乙個數.輸出每次詢問的值.初看這題感覺就是最一般的線段樹成段更新的應用.但下手後發現很多細節.對於一向很粗心的我調了很久才給調出來.成段更新前一文已經提到過.這裡再通過這一題補充一些很值得注意的地方 1 前乙個題因為只有最後才要輸出一段...

POJ 3468 線段樹成段更新

很久以前的題目再做一遍複習一下。要點 1 約定在任何時候 add num 到達節點的時候就立即更新節點的 sum 值。2 每次更新節點回溯的時候記得維護節點的 sum 值。3 執行詢問操作的時候,遇到 lazy 標記為1 的時候往下 push down,同時記得第一點 4 遇到符合要求的詢問區間時,...

poj 3468線段樹 成段更新

題意和題目都很簡單,就是線段樹的成段更新,只要做一下延遲標記就好了。題意 查詢一段數的和,和更新一段數的值。一開始出了點錯誤,忘在更新時做延遲標記了。includelong long sum 100010 2 long long add 100010 2 void push up int rt vo...