Cod sursa(job #1257891)

Utilizator mvcl3Marian Iacob mvcl3 Data 8 noiembrie 2014 12:05:53
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>

#define Max_Size 15009
#define zeros(x) x & (-x)

using namespace std;

const char iname[] = "datorii.in";
const char oname[] = "datorii.out";

int N, M, AIB[Max_Size];

inline void Set(int poz, int val)
{
    for(int i = poz; i <= N; i += zeros(i))
        AIB[i] += val;
}

inline int Get(int a)
{
    int sum = 0;

    for(int i = a; i > 0; i -= zeros(i))
        sum += AIB[i];

    return sum;
}

int main()
{
    FILE *in = fopen(iname, "r");
    FILE *out = fopen(oname, "w");

    fscanf(in, "%d%d", &N, &M);

    for(int x, i = 1; i <= N; ++i)  {
        fscanf(in, "%d", &x);
        Set(i, x);
    }

    for(int t, a, b, i = 1; i <= M; ++i)    {
        fscanf(in, "%d%d%d", &t, &a, &b);

        if(!t)  Set(a, -b);
        else    fprintf(out, "%d\n", Get(b) - Get(a - 1));
    }

    return 0;
}