Skip to content

Commit 8975ae1

Browse files
committed
code example
1 parent d04caf8 commit 8975ae1

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

segtree_dynamic.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
struct segtree{
2+
int lb, rb;
3+
int sum = 0;
4+
segtree *l = 0, *r = 0;
5+
segtree (int _lb, int _rb) {
6+
lb = _lb, rb = _rb;
7+
}
8+
void extend () {
9+
int t = (lb + rb) / 2;
10+
if (!l) {
11+
l = new segtree(lb, t);
12+
r = new segtree(t+1, rb);
13+
}
14+
}
15+
void add (int k, int x) {
16+
sum += x;
17+
if (lb != rb) {
18+
extend();
19+
int t = (lb + rb) / 2;
20+
if (k <= t) l->add(k, x);
21+
else r->add(k, x);
22+
}
23+
}
24+
int get_sum(int lq, int rq){
25+
if (lb >= lq && rb <= rq) return sum;
26+
if (lb > rq || rb < lq) return 0;
27+
extend();
28+
return l->get_sum(lq, rq) + r->get_sum(lq, rq);
29+
}
30+
};

0 commit comments

Comments
 (0)