Cod sursa(job #779612)

Utilizator stefanzzzStefan Popa stefanzzz Data 18 august 2012 11:31:54
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#define MAXN 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");

long n,m,x,y,v[MAXN],nr0,tip,S1,S,t,sol;

void adauga(long a,long b);
void suma(long a);

int main()
{
    int i,j;
    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>x;
        adauga(x,i);}
    for(i=1;i<=m;i++){
        f>>tip;
        if(!tip){
            f>>x>>y;
            adauga(y,x);
            continue;}
        if(tip==1){
            f>>x>>y;
            suma(y);
            S1=S;
            suma(x-1);
            g<<S1-S<<'\n';}
        else{
            f>>x;
            sol=-1;
            for(t=1;t<=n;t*=2);
            for(j=0;t;t/=2){
                if(j+t<=n&&x>=v[j+t]){
                    j+=t;
                    x-=v[j];
                    if(!x){
                        sol=j;
                        break;}}}
            g<<sol<<'\n';}}
    f.close();
    g.close();
    return 0;
}

void adauga(long a,long b){
    for(b;b<=n;b+=nr0){
        nr0=(b&(-b));
        v[b]+=a;}}

void suma(long a){
    S=0;
    for(a;a>0;a-=nr0){
        nr0=(a&(-a));
        S+=v[a];}}