Cod sursa(job #479655)

Utilizator space.foldingAdrian Soucup space.folding Data 24 august 2010 18:44:41
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
int n, m, a[15000];
long long c[15000];
FILE *in, *out;
void read()
{
	int i;
	in = fopen("datorii.in", "r");
	fscanf(in, "%d%d", &n, &m);
	for(i=1; i<=n; ++i)
		fscanf(in, "%d", a+i);
}

int return_k(int i)
{
    for(unsigned j=0; j<sizeof(int); ++j)
        if((1<<j)&i)
            return j;
    return -1;
}


void solve()
{
	int code, i, j;
	out=stdout;
	for(i=1; i<=n; ++i)
	{
	    for(j=i-(1<<return_k(i))+1; j<=i; j++)
            c[i]+=a[j];
	}

	for(i=0; i<m; ++i)
	{
	    int c1, c2;
	    fscanf(in, "%d%d%d", &code, &c1, &c2);
	    if(code==0)
        {
            while(c1<=n)
            {
                c[c1]-=c2;
                c1+=(1<<return_k(c1));
            }
        }
        if(code==1)
        {
            long long s1=0, s2=0;
            c1--;
            while(c1>=1)
            {
                s1+=c[c1];
                c1-=(1<<return_k(c1));
            }
            while(c2>=1)
            {
                s2+=c[c2];
                c2-=(1<<return_k(c2));
            }
            fprintf(out, "%lld\n", s2-s1);
        }

	}
}


int main ()
{
	read();
	solve();
	return 0;
}