Cod sursa(job #790383)

Utilizator elffikkVasile Ermicioi elffikk Data 21 septembrie 2012 03:52:39
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.07 kb
var a1,a2:array[1..15000] of integer;
    i,j,n,rn,m:longint;
    f1,f2:text;
    c,a,b:integer;
    
function ceil(n:real):longint;
begin
  if frac(n)=0
  then ceil:=trunc(n)
  else ceil:=trunc(n)+1
end;

function sum(a,b:integer):longint;
var s:longint; i,r1,r2:longint;
begin
  s:=0;
  r1:=ceil(a/rn);
  r2:=ceil(b/rn);
  while a<=b do
  begin
    if (a mod rn=1)and(a+rn<=b)
    then begin
        s:=s+a2[ceil(a/rn)];
        a:=a+rn;
    end
    else begin
        s:=s+a1[a];
        a:=a+1;
    end
  end;
  sum:=s;
end;

begin
  assign(f1,'datorii.in');
  reset(f1);
  assign(f2,'datorii.out');
  rewrite(f2);
  
  readln(f1,n,m);
  
  rn:=ceil(sqrt(n));
  for i:=1 to rn do a2[i]:=0;
  
  for i:=1 to n do
  begin
    read(f1,a1[i]);
    inc(a2[ceil(i/rn)], a1[i]);
  end;

  for i:=1 to m do
  begin
     read(f1,c,a,b);
     if c=0
     then begin
        dec(a1[a],b);
        dec(a2[ceil(a/rn)], b);
     end
     else
     begin
        writeln(f2,sum(a,b));
     end;
  end;
  
  close(f1);
  close(f2);
end.