Cod sursa(job #479658)

Utilizator space.foldingAdrian Soucup space.folding Data 24 august 2010 18:57:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#define lsb(x)  ((x ^ (x - 1)) & x)
int n, m, a[15001];
long long c[15001];
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);
}

void solve()
{
	int code, i, j;
	out=fopen("datorii.out", "w");
	for(i=1; i<=n; ++i)
	{
	    for(j=i-(lsb(i))+1; j<=i; j++)
            if(j>=0)
                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 && c1>=0)
            {
                c[c1]-=c2;
                c1+=(lsb(c1));
            }
        }
        if(code==1)
        {
            long long s1=0, s2=0;
            c1--;
            while(c1>=1 && c1<=n)
            {
                s1+=c[c1];
                c1-=(lsb(c1));
            }
            while(c2>=1 && c2<=n)
            {
                s2+=c[c2];
                c2-=(lsb(c2));
            }
            fprintf(out, "%lld\n", s2-s1);
        }

	}
}


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