Cod sursa(job #2042214)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 18 octombrie 2017 10:41:53
Problema Arbori indexati binar Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#define DIM 100001
using namespace std;

ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,m,i,j,st,dr,mid,c,x,y,v[DIM],a[DIM];
int query (int p){
    int r = 0;
    for (;p;p-=(p&-p) )
        r += a[p];
    return r;
}
int update (int p,int x){
    for (;p<=n;p+=(p&-p))
        a[p] += x;
}
int main (){

    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>v[i];
        update (i,v[i]);
    }
    for (i=1;i<=m;i++){
        fin>>c;
        if (c == 0){
            fin>>x>>y;
            update (x,y);
        }
        else{
            if (c == 1){
                fin>>x>>y;
                fout<<query (y) - query (x-1)<<"\n";
            }
            else{
                fin>>x;
                st = 1;
                dr = n;
                while (st<=dr){
                    mid = (st + dr)/2;
                    if (query(mid) < x)
                        st = mid+1;
                    else
                        dr = mid-1;
                }
                if (query(st) == x)
                    fout<<st<<"\n";
                else
                    fout<<-1<<"\n";
            }
        }
    }



    return 0;
}