Cod sursa(job #903222)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 1 martie 2013 19:15:19
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");
const int maxn = 15002;
int N, M;
int sume[maxn];

void update(int val, int ind)
{
    int poz = 0;
    while (ind <= N)
    {
        sume[ind] += val;
        poz = ((ind ^ (ind - 1)) & ind);
        ind += poz;
    }
}

int findSum(int ind)
{
    int poz = 0, sum = 0;
    while (ind > 0)
    {
        sum += sume[ind];
        poz = ((ind ^ (ind - 1)) & ind);
        ind -= poz;
    }
    return sum;
}

int query(int st, int dr)
{
    return findSum(dr) - findSum(st-1);
}

int main()
{
    in >> N >> M; int cod, x, y;
    for (int i = 1; i <= N; i++) { in >> x; update(x, i); }
    for (int i = 1; i <= M; i++)
    {
        in >> cod;
        if (cod == 0) {
            in >> x >> y;
            update(-y, x);
        }
        else {
            in >> x >> y;
            out << query(x, y) << '\n';
        }

    }
    return 0;
}