| 15 | segs[id].sum = 0; |
| 16 | return id; } |
| 17 | int update(int idx, int v, int id) { |
| 18 | if (id == -1) return -1; |
| 19 | if (idx < segs[id].l || idx > segs[id].r) return id; |
| 20 | int nid = segcnt++; |
| 21 | segs[nid].l = segs[id].l; |
| 22 | segs[nid].r = segs[id].r; |
| 23 | segs[nid].lid = update(idx, v, segs[id].lid); |
| 24 | segs[nid].rid = update(idx, v, segs[id].rid); |
| 25 | segs[nid].sum = segs[id].sum + v; |
| 26 | return nid; } |
| 27 | int query(int id, int l, int r) { |
| 28 | if (r < segs[id].l || segs[id].r < l) return 0; |
| 29 | if (l <= segs[id].l && segs[id].r <= r) return segs[id].sum; |