Cod sursa(job #1183177)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 8 mai 2014 16:32:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda aib-uri Marime 0.87 kb
#include <stdio.h>
#define ub(x) (x&(-x))
using namespace std;
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
long n,i,x,m,y,v[100001],a,b,t,sum,st,dr,mij;
void add(long x,long val)
{
    int i;
    for (i=x;i<=n;i+=ub(i))
        v[i]+=val;
}
void dif (long x,long val)
{
    int i;
    for (i=x;i<=n;i+=ub(i))
        v[i]-=val;
}
long suma(long x)
{
    long s=0,i;
    for (i=x;i>0;i-=ub(i))
        s+=v[i];
    return s;
}
int main()
{
    fscanf(f,"%ld%ld",&n,&m);
    for (i=1;i<=n;i++)
    {
        fscanf(f,"%ld",&x);
        add(i,x);
    }
    for (i=1;i<=m;i++)
    {
        fscanf(f,"%ld",&t);
        fscanf(f,"%ld%ld",&a,&b);
        if (t==0)
            dif(a,b);
        else
        {
            sum=suma(b)-suma(a-1);
            fprintf(g,"%ld\n",sum);
        }
    }
    fclose(f);
    return 0;
}