Cod sursa(job #1243651)

Utilizator pulseOvidiu Giorgi pulse Data 16 octombrie 2014 09:54:45
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 15005;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int N, M;
int Arb[3 * MAXN], pos, val, sum, a, b;

void Update(int node, int l, int r, int t)
{
    if (l == r)
    {
        if (t == 0) Arb[node] = val;
        else Arb[node] -= val;
        return;
    }
    int m = (l + r) >> 1;
    if (pos <= m) Update(2 * node, l, m, t);
    else Update(2 * node + 1, m + 1, r, t);
    Arb[node] = Arb[2 * node] + Arb[2 * node + 1];
}

void Query(int node, int l, int r)
{
    if (a <= l && r <= b)
    {
        sum += Arb[node];
        return;
    }
    int m = (l + r) >> 1;
    if (a <= m) Query(2 * node, l, m);
    if (m < b) Query(2 * node + 1, m + 1, r);
}

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; ++i)
    {
        int x;
        fin >> x;
        pos = i;
        val = x;
        Update(1, 1, N, 0);
    }
    for (int type, x, y; M; --M)
    {
        fin >> type >> x >> y;
        if (type == 0)
        {
            pos = x;
            val = y;
            Update(1, 1, N, 1);
        }
        else
        {
            a = x;
            b = y;
            sum = 0;
            Query(1, 1, N);
            fout << sum << '\n';
        }
    }
    fin.close();
    fout.close();
    return 0;
}