Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses
- math;
- var
- t,sum:array[0..1000000] of int64;
- i,n,m,l,r,x:longint;
- c:char;
- procedure upd(v,l,r:longint);
- var
- m:longint;
- begin
- if t[v] > -1 then
- begin
- t[v + v] := t[v];
- t[v + v + 1]:=t[v];
- m:=(l + r) shr 1;
- sum[v + v]:=t[v] * (m - l + 1);
- sum[v + v + 1]:=t[v] * (r - m);
- t[v]:=-1;
- end;
- end;
- procedure update(v,l,r,x,y:longint;color:int64);
- var
- m:longint;
- begin
- if x > y then exit;
- if (l = x) and (r = y) then
- begin
- t[v] := color;
- sum[v] := color * (r - l + 1);
- end
- else
- begin
- m:=(l + r) shr 1;
- upd(v, l ,r);
- update(v + v, l, m, x, min(m, y), color);
- update(v + v + 1, m + 1, r, max(m + 1, x), y ,color);
- sum[v]:=sum[v + v] + sum[v + v + 1];
- end;
- end;
- function sum_q(v,l,r,x,y:longint):int64;
- var
- m:longint;
- begin
- if x > y then exit(0);
- if (l = x) and (r = y) then
- exit(sum[v])
- else
- begin
- upd(v, l , r);
- m:=(l + r) shr 1;
- exit(sum_q(v + v, l, m, x, min(y, m)) + sum_q(v + v + 1, m + 1, r, max(m + 1,x), y));
- end;
- end;
- Begin
- end.
Advertisement
Add Comment
Please, Sign In to add comment