Cod sursa(job #932781)

Utilizator RaileanuCristian Raileanu Raileanu Data 29 martie 2013 11:29:21
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.31 kb
const mx=1000;
var c: array[0..mx] of longint;
    f1,f2: text;
    cod,a,b, n,m,i: longint;

Function nz(x: longint): longint;
var p: longint;
Begin
     p:=1;
     while x mod 2 =0 do
           Begin
                p:=p*2;
                x:= x div 2;
           end;
     nz:=p;
end;

Procedure modificare(i, x: longint);
var dx: longint;
Begin
     while i<=n do
           Begin
                c[i]:=c[i]-x;
                i:=i+nz(i);
           end;

end;

Function interogare(st,dr: longint): longint;
var p,sms, smd: longint;
Begin
     p:=st-1; sms:=0;
     while p>0 do
           Begin
                sms:=sms+c[p];
                p:=p-nz(p);
           end;
     p:=dr; smd:=0;
     while p>0 do
           Begin
                smd:=smd+c[p];
                p:=p-nz(p);
           end;
     interogare:=smd-sms;
end;

Begin
     assign(f1, 'datorii.in');
     assign(f2, 'datorii.out');
     reset(f1);
     readln(f1,n,m);
     for i:=1 to n do
         Begin
              read(c[i]);
              c[i]:=c[i]+ interogare(i-nz(i)+1,i) ;
         end;

     for i:=1 to m do
         BEgin
              readln(cod,a,b);
              if cod=1 then modificare(a,b)
              else writeln(f2,interogare(a,b));
         end;
     close(f1); close(f2);
End.