Pagini recente » Cod sursa (job #886836) | Cod sursa (job #2098585) | Cod sursa (job #1424887) | Cod sursa (job #988235) | Cod sursa (job #2057716)
#include<cstdio>
using namespace std;
int aib[100001],n;
int putere(int x)
{
return (x^(x-1))&x;
}
void add(int x,int c)
{
for(int i=x;i<=n;i+=putere(i))
{
aib[i]+=c;
}
}
int calc(int x)
{
int rez=0;
for(int i=x;i>0;i-=putere(i))
{
rez+=aib[i];
}
return rez;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int m,i,x,y,t,med,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&x);
add(i,x);
}
for(i=1;i<=m;++i)
{
scanf("%d%d",&t,&x);
if(t!=2)
{
scanf("%d",&y);
if(!t)
add(x,y);
else
printf("%d\n",calc(y)-calc(x-1));
}
else
{
bool ok=0;
for(med=1;med<n;med*=2);
for(j=0;med;med/=2)
{
if(j+med<=n&&x>=aib[j+med])
{
x-=aib[j+med];
j+=med;
if(!x)
{
ok=1;
printf("%d\n",j);
break;
}
}
}
if(!ok)
printf("-1\n");
}
}
return 0;
}