poj3468(線段數區間操作模板)

2021-07-24 17:10:27 字數 1289 閱讀 9234

/*

translation:

給出一列陣列,有兩種操作,將某一區間所有的數字都加上c,查詢某一區間的和。

solution:

線段樹區間操作模板

note:

date:

2016.11.18

*/#include #include using namespace std;

const int maxn = 100000 + 5;

const int inf = 1e9 + 10;

typedef long long ll;

ll sum[maxn * 4], inc[maxn * 4];

int s[maxn * 4], e[maxn * 4];

int n, q;

inline void push_up(int rt)

void build(int l, int r, int rt)

build(l, (l + r) / 2, rt << 1);

build((l + r) / 2 + 1, r, rt << 1 | 1);

push_up(rt);

}void push_down(int rt, int num)

}void update(int c, int l, int r, int rt) //線段樹節點中的l~r區間增加c

if(s[rt] == e[rt]) return;

push_down(rt, e[rt] - s[rt] + 1);

int m = (s[rt] + e[rt]) / 2;

if(r <= m) update(c, l, r, rt << 1);

else if(l > m) update(c, l, r, rt << 1 | 1);

else

push_up(rt);

}ll query(int l, int r, int rt)

push_down(rt, e[rt] - s[rt] + 1);

ll res = 0;

int m = (s[rt] + e[rt]) / 2;

if(r <= m) res += query(l, r, rt << 1);

else if(l > m) res += query(l, r, rt << 1 | 1);

else

return res;

}int main()

else if(cmd[0] == 'q')

} }return 0;

}

POJ 3468 線段樹區間

這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是lazy,然後還需要乙個統計當前區間的全部和的陣列。就可以輕鬆解...

POJ 3468《線段樹,區間add

題目連線 位運算 k 1 相當於 k 2 k 1 1 相當於 k 2 1 修改區間內的值,並且維護區間和。詳見 include include include using namespace std typedef long long ll const int maxn 100000 10 int ...

poj3468線段樹區間修改

題目哈。最近在隊裡的寒假作業中第一次遇到了線段樹的題,之前也聽思雨姐姐說過也看過她寫過,但自己始終沒個影響,然後自己做了幾天也算剛入這個門,會寫一些比較基礎的線段樹了,之所以把這道題寫下來是因為線段樹的精華還是在於區間修改,也是最實用的部分。線段樹的區間修改,最巧妙的部分是建立乙個lazy樹,與各個...