Cod sursa(job #1809183)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 18 noiembrie 2016 18:20:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

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

const int Max = 100010;

int aib[Max], n, meh;

void aibUpdate(int i, int s)
{
    for(; i <= n; i+=i&(-i))
    {
        if(aib[i] - s > 0)
            aib[i]-= s;
        else
            aib[i] = 0;
    }
}

void aibTopla(int i, int s)
{
    for(; i <= n; i+=i&(-i))
        aib[i]+= s;
}

int aibQuery(int i)
{
    int s = 0;
    for(; i >= 1; i-=i&(-i))
        s+= aib[i];

    return s;
}

int main()
{
    int m, tur, x, y;
    in >> n >> m;

    for(meh = 1; (1 << meh) <= n; ++meh);
    meh--;

    for(int i = 1; i <= n; ++i)
    {
        in >> x;
        aibTopla(i, x);
    }
    for(; m; --m)
    {
        in >> tur;
        if(tur == 0)
        {
            in >> x >> y;
            aibUpdate(x, y);
        }
        else if(tur == 1)
        {
            in >> x >> y;
            out << aibQuery(y) - aibQuery(x - 1) << "\n";
        }
    }
    return 0;
}