Mai intai trebuie sa te autentifici.

Cod sursa(job #189134)

Utilizator socheoSorodoc Ionut socheo Data 12 mai 2008 11:39:19
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>
int t[100001],i,j,x,n,v,q,w,s1,s2,s,m;
void build(int a,int b)
 { for(;a<=n;a+=a&-a)
      t[a]+=b;

 }
void suma(int p)
{ s=0;
 for(;p>=1;p-=p&-p)
   s=s+t[p];
}
void ver(int q)
{ int l=1;
  int r=n;
  while(l<=r)
  { int y=(l+r)/2;
    suma(y);
    if(s==q)
    { printf("%d\n",y);
     return; }
    else
    {if(s<q) l=y+1;
     if(s>q) r=y-1;
     }        }
   printf("-1\n");
 }
    
int main()
{freopen("aib.in","r",stdin);
 freopen("aib.out","w",stdout);
 scanf("%d",&n);
 scanf("%d",&m);
 for(i=1;i<=n;i++)
  { scanf("%d",&x);
    build(i,x);
    }
for(i=1;i<=m;i++)
 { scanf("%d",&v);
  if(v==0)
   { scanf("%d%d",&q,&w);
     build(q,w);
     }
 if(v==1)
  { scanf("%d%d",&q,&w);
    suma(w);
    s1=s;
    suma(q-1);
    s2=s;
    s=s1-s2;
    printf("%d\n",s);
   }
  if(v==2)
   {scanf("%d",&q);
    ver(q);
    }
   }
  return 0;
  }