Pagini recente » Cod sursa (job #1996860) | Cod sursa (job #2798476) | Cod sursa (job #2621987) | Cod sursa (job #319174) | Cod sursa (job #1052470)
#include <stdio.h>
#include <fstream>
#include <string.h>
using namespace std;
int n, m, i, a[100010], c, s, x, y, z, k;
void fa(int x, int v){
c=0;
while(x<=n)
{
a[x]+=v;
while ( !(x & (1<<c)) )
c++;
x+=(1<<c);
c+=1;
}
}
int suma(int x){
c=0, s=0;
while(x>0)
{
s+=a[x];
while( !(x & (1<<c)) )
c++;
x-=(1<<c);
c+=1;
}
return s;
}
int cauta(int v){
int i, p;
for( p=1; p<n; p=(p<<1) );
for(i=0; p; p>>=1 )
{
if(i+p<=n)
{
if(v>=a[i+p])
{
i+=p;
v-=a[i];
if(!v)
return i;
}
}
}
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", &z);
fa(i, z);
}
for(;m;m--)
{
scanf("%d", &k);
if(k<2)
{
scanf("%d %d", &x, &y);
if(!k)
fa(x, y);
else
printf("%d\n", suma(y)-suma(x-1));
}
else
{
scanf("%d", &x);
printf("%d\n", cauta(x));
}
}
}