Cod sursa(job #1007749)

Utilizator ScateWayScateWay ScateWay Data 9 octombrie 2013 17:52:24
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#define NMAX 100005
int n, m, a, b, v[NMAX], x, j, i;
int caut()
{
    int s,d,piv;
    s=1;
    d=n;
    piv=v[(s+d)/2];
    while(s<d)
    {
        if(piv==a)
            return (s+d)/2;
        else
            if(piv>a)
                d=(s+d)/2;
            else
                s=(s+d)/2+1;
        piv=v[(s+d)/2];
    }
    if(piv==a)
        return s;
    return -1;
}
int main()
{
    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x);
        v[i]=v[i-1]+x;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d",&x);
        if(x==0)
        {
            scanf("%d %d",&a,&b);
            for(j=a;j<=n;j++)
                v[j]+=b;
        }
        else
            if(x==1)
            {
                scanf("%d %d",&a,&b);
                printf("%d\n",v[b]-v[a-1]);
            }
            else
            {
                scanf("%d",&a);
                printf("%d\n",caut());
            }
    }
    return 0;
}