1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| void update(int l, int r, int c, int s, int t, int p) { if (l <= s && t <= r) { d[p] = (t-s+1) *c, b[p] = c,v[p] = 1; return ; } int m = s + ((t-s) >> 1); if (v[p]) { d[p*2] = b[p] * (m-s+1); d[p*2+1] = b[p] * (t-m); b[p*2] = b[p*2=1] = b[p]; v[p*2] = v[p*2+1] = 1; v[p] = 0; } if (l <= m) update(l,r,c,s,m,p*2); if (r>m)update(l,r,c,m+1,t,p*2+1); }
public int getSum(int l, int r, int s, int t, int p) { if (l <= s && t <= r) return d[p]; int m = s + ((t-s) >> 1); if (v[p]){ d[p * 2] += d[p] * (s-m+1); d[p*2+1] += d[p] *(t-m); b[p*2] = b[p*2+1] = b[p]; v[p*2] = v[p*2+1] = 1; v[p] = 0; } int sum = 0; if(l <= m) sum = getSum(l, r, s, m, p*2); if (r > m) sum += getSum(l,r,m,t,p*2+1); return sum; }
|