Cod sursa(job #1206479)

Utilizator victormarinMarin Victor victormarin Data 10 iulie 2014 11:00:44
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#define filein "datorii.in"
#define fileout "datorii.out"
using namespace std;

FILE *in,*out;

int n,m;
int vx[15001];
int aib[15001];

void Update1(int poz,int val);
void Update2(int poz,int val);
int Query(int poz);

void ReadData();



int main()
{
    in=fopen(filein,"r");
    out=fopen(fileout,"w");
    ReadData();
    int i,cod,t,v,p,q;
    for (i=1; i<=m; i++)
    {
        fscanf(in,"%d",&cod);
        if (cod==0)
        {
            fscanf(in,"%d%d",&t,&v);
            Update2(t,v);
        }
        if (cod==1)
        {
            fscanf(in,"%d%d",&p,&q);
            fprintf(out,"%d\n",Query(q)-Query(p-1));
        }
    }

    fclose(in);
    fclose(out);
    return 0;
}

void ReadData()
{
    fscanf(in,"%d%d",&n,&m);
    int i;
    for (i=1; i<=n; i++)
    {
        fscanf(in,"%d",vx+i);
        Update1(i,vx[i]);
    }
}

void Update1(int poz,int val)
{
    for (; poz<=n; poz+=poz&-poz)
        aib[poz]+=val;
}

void Update2(int poz,int val)
{
    for (; poz<=n; poz+=poz&-poz)
        aib[poz]-=val;
}

int Query(int poz)
{
    int s=0;
    for (; poz; poz-=poz&-poz)
        s+=aib[poz];
    return s;
}