Cod sursa(job #2553365)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 21 februarie 2020 21:39:04
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define ubs(x) ((-x)&x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");

int n,m,aib[1<<17];

void Update(int poz,int val)
{   for(int i=poz; i<=n; i+=ubs(i))
        aib[i]+=val;
}

int Query(int poz)
{   int s=0;
    for(int i=poz; i; i-=ubs(i))
        s+=aib[i];
    return s;
}

int CautBin(int x)
{   int st=1,dr=n;
    while(st<=dr)
    {   int mij=(st+dr)>>1;
        int sum=Query(mij);
        if(sum==x)
            return mij;
        sum<x ? st=mij+1 : dr=mij-1;
    }
    return -1;
}

int main()
{   f>>n>>m;
    for(int x,i=1; i<=n; i++)
    {   f>>x;
        Update(i,x);
    }
    for(int t; m; m--)
    {   f>>t;
        if(t<2)
        {   int x,y;
            f>>x>>y;
            if(!t)
                Update(x,y);
            else
                g<<Query(y)-Query(x-1)<<'\n';
        }
        else
        {   int x;
            f>>x;
            g<<CautBin(x)<<'\n';
        }
    }
    g.close(); return 0;
}