Cod sursa(job #1970496)

Utilizator miruna999Morarasu Miruna miruna999 Data 19 aprilie 2017 13:30:55
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
#define pas(x) ((x-1)^x)&x
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,aib[200005],v,a,b,k;

void update(int x,int val)
{
    for(int i=x;i<=n;i+=pas(i))
        aib[i]+=val;
}

int suma(int x)
{
    int sum=0;
    for(int i=x;i>0;i-=pas(i))
        sum+=aib[i];
    return sum;
}

int caut()
{
    int sum=0;
    for(int i=1;i<=n&&sum<=k;i++)
        if(suma(i)==k)
            return i;
    return -1;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
        f>>a,update(i,a);
    for(int i=1;i<=m;i++)
    {
        f>>v;
        if(v==0)
            f>>a>>b,update(a,b);
        else
        if(v==1)
            f>>a>>b,g<<suma(b)-suma(a-1)<<'\n';
        else
            f>>k,g<<caut()<<'\n';
    }
    return 0;
}