Cod sursa(job #2784191)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 16 octombrie 2021 01:09:13
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <stdio.h>

using namespace std;
const int NMAX = 15000;

void update(int pos, int val, int n);
int query(int pos);

int aib[NMAX + 1];

int main()
{
    int n, m, i, type, t, v, l, r;
    FILE *fin = fopen("datorii.in", "r");

    fscanf(fin, "%d%d", &n, &m);
    for (i = 1; i <= n; i++)
    {
        fscanf(fin, "%d", &v);
        update(i, v, n);
    }

    FILE *fout = fopen("datorii.out", "w");
    for (i = 0; i < m; i++)
    {
        fscanf(fin, "%d", &type);
        if (type == 0)
        {
            fscanf(fin, "%d%d", &t, &v);
            update(t, -v, n);
        }
        else
        {
            fscanf(fin, "%d%d", &l, &r);
            fprintf(fout, "%d\n", query(r) - query(l - 1));
        }
    }
    fclose(fout);
    fclose(fin);
    return 0;
}

void update(int pos, int val, int n)
{
    aib[pos] += val;
    while (n - pos >= (-pos & pos))
    {
        pos += (pos & -pos);
        aib[pos] += val;
    }
}
int query(int pos)
{
    int s = 0;
    while (pos)
    {
        s += aib[pos];
        pos -= (pos & -pos);
    }
    return s;
}