Cod sursa(job #1850595)

Utilizator Walrus21andrei Walrus21 Data 18 ianuarie 2017 19:32:01
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#define N 15002

using namespace std;

int i, j, n, m, x, a, b, s, v[N], A[4*N];
bool c;

void up(int k, int l, int r, int p, int val)
{
    if(l == r)
        A[k] = val;
    else
    {
        int m = (l + r) / 2;
        if(p <= m)
            up(2 * k, l, m, p, val);
        else
            up(2 * k + 1, m + 1, r, p, val);
        A[k] = A[2 * k] + A[2 * k + 1];
    }
}

void q(int k, int l, int r)
{
    if(a <= l && r <= b)
        s += A[k];
    else
    {
        int m = (l + r) / 2;
        if(a <= m)
            q(2 * k, l, m);
        if(b > m)
            q(2 * k + 1, m + 1, r);
    }
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &v[i]);
        up(1, 0, n - 1, i, v[i]);
    }
    for(i = 0; i < m; i++)
    {
        scanf("%d%d%d", &c, &a, &b);
        a--;
        if(c)
        {
            s = 0;
            b--;
            q(1, 0, n - 1);
            printf("%d\n", s);
        }
        else
        {
            v[a] -= b;
            up(1, 0, n - 1, a, v[a]);
        }
    }
    return 0;
}