Cod sursa(job #2529520)

Utilizator MaraPMara P MaraP Data 23 ianuarie 2020 16:53:35
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#define MAXN 100005
using namespace std;

int aib[MAXN];
int n,m;

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

int nrZerouri(int x)
{
    return (x&(-x));
}

void adaugare(int valoare, int poz)
{
    int pozitie=poz;
    while(pozitie<=n)
    {
        aib[pozitie]+=valoare;
        pozitie+=nrZerouri(pozitie);
    }
}

long long int suma(int x)
{
    long long int s=0;
    for(int i=x;i>0;i-=nrZerouri(i))
        s+=aib[i];
    return s;
}
long long int s(int x, int y)
{
    return suma(y)-suma(x-1);
}
//int cautbin(int val)
//{
//    int st=1, dr=n;
//    while(st<=dr)
//    {
//        int mij=(st+dr)/2;
//        if(aib[mij]==val)
//            return mij;
//        if(aib[mij]<val)
//            st=mij+1;
//        else
//            dr=mij;
//    }
//    return -1;
//}
void citire()
{
    fin>>n>>m;

    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        adaugare(x,i);
    }
    int op;
    for(int i=0;i<m;i++)
    {
        fin>>op;
        if(op==0)
        {
            int x,y;
            fin>>x>>y;
            adaugare(y,x);
        }
        if(op==1)
        {
            int x,y;
            fin>>x>>y;
            fout<<s(x,y)<<"\n";
        }
        if(op==2)
        {
            int x;
            fin>>x;
            fout<<"\n";
        }
    }
}
int main()
{
    citire();
    return 0;
}