Cod sursa(job #1390013)

Utilizator Arodoet96Teodora Stoleru Arodoet96 Data 16 martie 2015 19:44:56
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define DMAX 100004

using namespace std;

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

int n, m;
int A[DMAX];

void citire();
void update(int poz, int val);
int query(int poz);

int main()
{
    citire();
    return 0;
}

void citire()
{
    int i, tip, a, b;
    fin>>n>>m;
    for(i=1;i<=n;++i)
    {
        fin>>b;
        update(i, b);
    }

    for(i=1;i<=m;++i)
    {
        fin>>tip;

        if(tip==0)
        {
            fin>>a>>b;//valorii de pe pozitia a i se adauga valoarea b
            update(a, b);
        }

        if(tip==1)
        {
            fin>>a>>b;//suma valorilor din intervalul [a, b]
            fout<<query(b)-query(a-1)<<'\n';
        }

        if(tip==2)
        {
            fin>>a;//Sa se determine pozitia minima k astfel incat suma valorilor primilor k termeni sa fie exact a
            fout<<"nu stiu"<<'\n';
        }
    }
}

void update(int poz, int val)
{
    int p;
    for(p=poz;p<=n;p=p+((p^(p-1))&p))
        A[p]+=val;
}

int query(int poz)
{
    int p, suma=0;
    for(p=poz;p;p=p-((p^(p-1))&p))
        suma+=A[p];
    return suma;
}