Cod sursa(job #1909261)

Utilizator ciocan_catalinCiocan Catalin - Iulian ciocan_catalin Data 7 martie 2017 12:03:17
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int nmax = 100005;
int N,M,aib[nmax];


inline void Update(int p, int x)
{
    while(p <= N)
    {
        aib[p] += x;
        p += (p & (-p));
    }
}

inline int Query(int p)
{
    int s = 0;
    while(p)
    {
        s += aib[p];
        p -= (p & (-p));
    }
    return s;
}

inline int BS(int x)
{
    int st,dr,mid,sol = -1,vv;
    st = 1; dr = N;
    while(st <= dr)
    {
        mid = (st + dr) >> 1;
        vv = Query(mid);
        if(vv == x) return mid;
        if(vv > x) dr = mid-1;
        else st = mid+1;
    }
    return sol;
}


int main()
{
    int tip,i,x,a,b;
    fin >> N >> M;
    for(i = 1; i <= N; i++)
    {
        fin >> x;
        Update(i,x);
    }
    while(M--)
    {
        fin >> tip >> a;
        if(tip == 2) fout << BS(a) << "\n";
        else
        {
            fin >> b;
            if(tip) fout << Query(b) - Query(a-1) << "\n";
            else Update(a,b);
        }
    }
    fout.close();
    return 0;
}