Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var
- a, b, c, d, e, g, i, j, m, ot, x1, y1, z1, x2, y2, z2: int64;
- f: array [0..128, 0..128, 0..128] of int64;
- procedure upd(x, y, z, dv: int64);
- var
- x1, y1, z1: int64;
- begin
- while (x <= a - 1) do
- begin
- y1 := y;
- while (y1 <= a - 1) do
- begin
- z1 := z;
- while (z1 <= a - 1) do
- begin
- f[x, y1, z1] := f[x, y1, z1] + dv;
- z1 := z1 or (z1 + 1);
- end;
- y1 := y1 or (y1 + 1);
- end;
- x := x or (x + 1);
- end;
- end;
- function query(x, y, z: int64): int64;
- var
- ot1, x1, y1, z1: int64;
- begin
- ot1 := 0;
- while (x >= 0) do
- begin
- y1 := y;
- while (y1 >= 0) do
- begin
- z1 := z;
- while (z1 >= 0) do
- begin
- ot1 := f[x, y1, z1] + ot1;
- z1 := (z1 and (z1 + 1)) - 1;
- end;
- y1 := (y1 and (y1 + 1)) - 1;
- end;
- x := (x and (x + 1)) - 1;
- end;
- query := ot1;
- end;
- begin
- assign(input, 'stars.in');
- assign(output, 'stars.out');
- reset(input);
- rewrite(output);
- readln(a);
- read(c);
- while (c <> 3) do
- begin
- if (c = 1) then
- begin
- read(x1, y1, z1, d);
- upd(x1, y1, z1, d);
- end;
- if (c = 2) then
- begin
- read(x1, y1, z1, x2, y2, z2);
- ot := query(x2, y2, z2) - (query(x1 - 1, y1 - 1, z1 - 1) + query(x2, y2, z1 - 1) + query(x2, y1 - 1, z2) + query(x1 - 1, y2, z2) - query(x1 - 1, y1 - 1, z2) - query(x2, y1 - 1, z1 - 1) - query(x1 - 1, y2, z1 - 1));
- writeln(ot);
- end;
- read(c);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement