Pagini recente » Cod sursa (job #2873820) | Cod sursa (job #2714349) | Cod sursa (job #105193) | Cod sursa (job #2430826) | Cod sursa (job #756538)
Cod sursa(job #756538)
#include<cstdio>
#define MX 100005
int t[MX];
void u (int i,int v)
{
while(i<MX)
t[i]+=v,i+=(i&-i);
}
int g (int i)
{
int s=0;
while(i)
s+=t[i],i-=(i&-i);
return s;
}
int main()
{
freopen ("aib.in","r",stdin);
freopen ("aib.out","w",stdout);
int n,m;
scanf ("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int x;
scanf ("%d",&x);
u (i,x);
}
while(m--){
int o,a,b;
scanf ("%d%d",&o,&a);
switch(o){
case 0:
scanf ("%d",&b);
u (a,b);
break;
case 1:
scanf ("%d",&b);
printf ("%d\n",g (b)-g (a-1));
break;
case 2:
int s=1,e=n;
while(s<e){
int m=(s+e)/2;
if(g (m)<a)
s=m+1;
else
e=m;
}
if(g (s)==a)
printf ("%d\n",s);
else
puts ("-1");
}
}
return 0;
}