Cod sursa(job #6357)

Utilizator vanila0406Ionescu Victor vanila0406 Data 18 ianuarie 2007 23:49:00
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.31 kb
program datorii;
var f,g:text;
        v:array[0..15001] of longint;
        c:array[0..15001] of longint;
        n,m:longint;



procedure iofile;
var i:longint;
begin
        assign(f,'datorii.in');
        reset(f);
        assign(g,'datorii.out');
        rewrite(g);
        readln(f,n,m);
        for i:=1 to n do
                begin
                        read(f,v[i]);
                        v[i]:=v[i]+v[i-1];
                end;
        fillchar(c,sizeof(c),0);
end;

function doila(x:longint):longint;
var p,i:longint;
begin
        p:=1;
        for i:=1 to x do
                p:=p*2;
        doila:=p;
end;

procedure aib;
var i,poz,s1,s2,ind,val,cod,st,dr,sum:longint;
begin
        for i:=1 to m do
                begin
                        read(f,cod);
                        if cod=0 then
                                begin
                                        read(f,ind);
                                        readln(f,val);
                                        poz:=0;
                                        while ind<=n do
                                                begin
                                                        c[ind]:=c[ind]+val;
                                                        while ind and doila(poz)=0 do
                                                                poz:=poz+1;
                                                        ind:=ind+doila(poz);
                                                        poz:=poz+1;
                                                end;
                                end else
                                begin
                                        read(f,st);
                                        readln(f,dr);
                                        poz:=0;
                                        s1:=0;
                                        sum:=v[dr]-v[st-1];
                                        while dr>0 do
                                                begin
                                                        s1:=s1+c[dr];
                                                        while dr and doila(poz)=0 do
                                                                poz:=poz+1;
                                                        dr:=dr-doila(poz);
                                                        poz:=poz+1;
                                                end;
                                        s2:=0;
                                        poz:=0;
                                        st:=st-1;
                                        while st>0 do
                                                begin
                                                        s2:=s2+c[st];
                                                        while st and doila(poz)=0 do
                                                                poz:=poz+1;
                                                        st:=st-doila(poz);
                                                        poz:=poz+1;
                                                end;
                                        writeln(g,sum-s1+s2);
                                end;
                end;
        close(g);
end;


begin
        iofile;
        aib;
end.