Cod sursa(job #2467161)

Utilizator FlaviusFeteanFetean Flavius FlaviusFetean Data 3 octombrie 2019 19:47:41
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

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

int arb[45001];

void pay(int poz, int val, int n)
{
    int i = 1, l = 1, r = n;
    while(l < r){
        arb[i] -= val;
        if(poz <= (l + r)/2) i *= 2, r = (l + r)/2;
        else i = 2*i + 1, l = (l + r)/2 + 1;
    }
    arb[i] -= val;
}

int querry(int p, int n)
{
    int i = 1, l = 1, r = n, s = arb[1];
    if(p == 0) return 0;
    while(l < r){
        if(p <= (l + r)/2){
            s -= arb[2*i + 1];
            i *= 2; r = (l + r)/2;
        }
        else i = 2*i + 1, l = (l + r)/2 + 1;
    }
    return s;
}

int main()
{
    int n, m, i, x, y, t;
    fin >> n >> m;
    for(i = 1; i <= n; i++){
        fin >> x; pay(i, -x, n);
    }
    for(i = 1; i <= m; i++){
        fin >> t >> x >> y;
        if(!t) pay(x, y, n);
        else fout << querry(y, n) - querry(x - 1, n) << "\n";
    }

    return 0;
}