Cod sursa(job #562492)

Utilizator andrei31Andrei Datcu andrei31 Data 23 martie 2011 10:06:36
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
const nmax=15000;
      mmax=100000;
var a,b,n:integer;
   sir:string;
    i,m:longint;
    s:array[1..1 shl 15]of longint;
    op:byte;

procedure updatare(l,r,pos:integer);
var m:integer;
begin
if l<>r then
 begin
 m:=(l+r)shr 1;
 if a<=m then updatare(l,m,pos shl 1)
         else updatare(m+1,r,pos shl 1+1);
 end;
dec(s[pos],b);
end;

function interogare(l,r,pos:integer):longint;
var m:integer;
    tt:longint;
begin
tt:=0;
if (a<=l)and(r<=b) then tt:=s[pos]
 else
  begin
  m:=(l+r)shr 1;
  if a<=m then inc(tt,interogare(l,m,pos shl 1));
  if b>m then  inc(tt,interogare(m+1,r,pos shl 1+1));
  end;
interogare:=tt;
end;

begin
assign(output,'datorii.out');rewrite(output);
assign(input,'datorii.in');reset(input);
readln(n,m);
a:=0;
while not seekeoln(input) do
 begin
 read(sir);
 sir:=sir;
 for i:=1 to length(sir) do
  if sir[i]=' ' then
    begin
    inc(a);
    b:=-b;
    updatare(1,n,1);
    b:=0;
    end
   else b:=b*10+ord(sir[i])-48;
 end;
inc(a);
 b:=-b;
 updatare(1,n,1);
for i:=1 to m do
 begin
 readln(op,a,b);
 if op=1 then writeln(interogare(1,n,1))
         else updatare(1,n,1);
 end;
close(input);
close(output);
end.