Cod sursa(job #50778)

Utilizator fc_oni_cu_50_pctAnul asta in play-out fc_oni_cu_50_pct Data 8 aprilie 2007 20:03:47
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.36 kb
program tribute_to_mars;
type vect=array[1..15000] of longint;
var f,g:text;
    c:vect;
    n,m,ad,i,poz,st,bit,q,prod,x,a,b,sum1,sum2:longint;
begin
assign(f,'datorii.in'); reset(f);
assign(g,'datorii.out'); rewrite(g);
read(f,n,m);
for i:=1 to n do begin
            read(f,ad);
            poz:=i;
            st:=0;
            prod:=1;
            while poz<=n do begin
              c[poz]:=c[poz]+ad;
              bit:=(poz and (poz-1)) xor poz;
              dec(bit);
              for q:=st+1 to bit do prod:=prod*2;
              st:=bit;
              poz:=poz+prod;
              end;
                        end;
for i:=1 to m do begin
         read(f,x,a,b);
               if x=1 then begin
                           sum1:=0;
                           poz:=b;
                           st:=0;
                           prod:=1;
                           while poz>0 do begin
                                 sum1:=sum1+c[poz];
                                 bit:=(poz and (poz-1)) xor poz;
                                 dec(bit);
                                 for q:=st+1 to bit do prod:=prod*2;
                                 st:=bit;
                                 poz:=poz-prod;
                                 end;
                           sum2:=0;
                           poz:=a-1;
                           st:=0;
                           prod:=1;
                           while poz>0 do begin
                                 sum2:=sum2+c[poz];
                                 bit:=(poz and (poz-1)) xor poz;
                                 dec(bit);
                                 for q:=st+1 to bit do prod:=prod*2;
                                 st:=bit;
                                 poz:=poz-prod;
                                 end;
                           writeln(g,sum1-sum2);
                           end
                           else begin

            ad:=-b;
            poz:=a;
            st:=0;
            prod:=1;
            while poz<=n do begin
              c[poz]:=c[poz]+ad;
              bit:=(poz and (poz-1)) xor poz;
              dec(bit);
              for q:=st+1 to bit do prod:=prod*2;
              st:=bit;
              poz:=poz+prod;
              end;


                           end;

         end;
close(f); close(g);
end.