Cod sursa(job #1138496)

Utilizator vlady1997Vlad Bucur vlady1997 Data 10 martie 2014 09:48:53
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
        #include <cstdio>
        using namespace std;
        int a[100001], s[100001];
        int cb (int x, int n)
        {
            int st=1, dr=n, m;
            while (st<=dr)
            {
                m=(st+dr)/2;
                if (s[m]==x) return m;
                else if (s[m]<x) st=m+1;
                else dr=m-1;
            }
            m=(st+dr)/2;
            if (s[m]==x) return m;
            return -1;
        }
        int main()
        {
            int n, m, i, j, x, y, z;
            freopen("aib.in","r",stdin);
            freopen("aib.out","w",stdout);
            scanf("%d%d",&n,&m); s[0]=0;
            for (i=1; i<=n; i++) {scanf("%d",&a[i]); s[i]=s[i-1]+a[i];}
            for (i=1; i<=m; i++)
            {
                scanf("%d",&z);
                if (z==0)
                {
                    scanf("%d%d",&x,&y); a[x]+=y;
                    for (j=x; j<=n; j++) s[j]+=y;
                }
                else if (z==1)
                {
                    scanf("%d%d",&x,&y);
                    int sum=s[y]-s[x-1];
                    printf("%d\n",sum);
                }
                else if (z==2)
                {
                    scanf("%d",&x);
                    int rez=cb(x,n);
                    printf("%d\n",rez);
                }
            }
            fclose(stdin);
            fclose(stdout);
            return 0;
        }