Cod sursa(job #2756699)

Utilizator MenelausSontea Vladimir Menelaus Data 2 iunie 2021 14:25:57
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>

const int N=15001;

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

/// suma de la parent(i) la i-1
int AIB[N+2];

int suma(int n, int poz)
{
    int s=0;
    for(int contor=poz+1; contor>=1; contor-=contor&(-contor))
    {
        s+=AIB[contor];
    }
    return s;
}

void update(int n, int poz, int dif)
{
    for(int contor=poz+1; contor<n+2; contor+=contor&(-contor))
    {
        AIB[contor]+=dif;
    }
}

int main()
{
    int n, m, x, qw, we;

    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        in>>x;
        update(n, i, x);
    }
    for(int i=1; i<=m; i++)
    {
        bool b;
        in>>b;

        if(b==0)
        {
            in>>qw>>we;
            update(n, qw, -we);
        }
        else
        {
            in>>qw>>we;
            out<<suma(n, we)-suma(n, qw-1)<<"\n";
        }
    }
}