Cod sursa(job #2462267)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 26 septembrie 2019 22:37:20
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")

// Solved using Binary Index Tree (arbori indexati binar)
#include <bits/stdc++.h>
using namespace std;

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

#define lsb(x) (x&(-x))
static const int NMAX = 15010;

int aib[NMAX*2];
int v[NMAX];

int query(int position)
{
    int sum=0;
    for(int i = position; i>= 1; i-=lsb(i))
    {
        sum+=aib[i];
    }
    return sum;
}

void update(int position, int val, int n)
{
    for(int i = position; i<=n; i+=lsb(i))
    {
        aib[i]+=val;
    }
}

int main()
{
    
    int n,m;
    fin >> n >> m;
    for(int i =1; i <= n; ++i)
    {
        fin >> v[i];
        update(i,v[i],n);
    }
    for(int i =1 ; i<= m; ++i)
    {
        int op,a,b;
        fin >> op >> a >> b;
        if(op)
        {
            fout << query(b) - query(a-1) << '\n';
        }
        else
        { 
            update(a,-b,n);   
        }
    }

    return 0;
}