Cod sursa(job #1324442)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 22 ianuarie 2015 12:01:59
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#define NMAX 15023
FILE *fin, *fout;
int n, m, temp, arb[2*NMAX], temp1;
bool f;
void pun(int st, int dr, int pos, int nod)
{
     if(st == dr)
     {
           arb[nod] += temp;
           return;
     }
     int mij = (st+dr)/2;
     if(pos <= mij) pun(st, mij, pos, 2*nod);
     if(pos > mij) pun(mij+1, dr, pos, 2*nod+1);
     arb[nod]  =arb[2*nod] + arb[2*nod+1];
     return ;
}
int interogare(int st, int dr, int st1, int dr1, int nod)
{
    if(st == st1 && dr == dr1)
    {
          return arb[nod];
    }
    int mij = (st+dr)/2;
    if(st1 > mij) return interogare(mij+1, dr, st1, dr1, 2*nod+1);
    if(dr1 <= mij) return interogare(st, mij, st1, dr1, 2*nod);
    return interogare(st, mij, st1, mij, 2*nod) + interogare(mij+1, dr, mij+1, dr1, 2*nod+1);
}
int main()
{
    fin = fopen("datorii.in", "r");
    fout = fopen("datorii.out", "w");
    fscanf(fin, "%d%d", &n, &m);
    for(int i = 0; i< n; i++)
    {
            fscanf(fin, "%d", &temp);
            pun(1, n, i+1, 1);
    }
    for(int i = 0; i< m; i++)
    {
            fscanf(fin, "%d%d%d", &f, &temp1, &temp);
            if(f)
            {
                 fprintf(fout, "%d\n", interogare(1, n, temp1, temp, 1));
            }
            else
            {
                temp*=-1;
                pun(1, n, temp1, 1);
            }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}