/*
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樹,與各個...