Pagini recente » Cod sursa (job #2100100) | Cod sursa (job #2469090) | Cod sursa (job #2082670) | Cod sursa (job #2468837) | Cod sursa (job #2484201)
#include <cstdio>
using namespace std;
const int Nmax=100005;
int n,aib[Nmax];
void update(int p, int x)
{
while(p<=n)
{
aib[p]+=x;
p+=(p&(-p));
}
}
int querry(int p)
{
int s=0;
while(p>0)
{
s+=aib[p];
p-=(p&(-p));
}
return s;
}
int verif(int x)
{
int st,dr,mij,p,sol=-1;
st=1; dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
p=querry(mij);
if(p>=x)
{
if(p==x)
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
return sol;
}
int main()
{
int x,y,t,m;
freopen ("aib.in","r",stdin);
freopen ("aib.out","w",stdout);
scanf("%d%d", &n,&m);
for(int i=1;i<=n;++i)
{
scanf("%d", &x);
update(i,x);
}
while(m--)
{
scanf("%d", &t);
if(t==2)
{
scanf("%d", &x);
printf("%d\n", verif(x));
}
else
{
scanf("%d%d", &x,&y);
if(t==1)
printf("%d\n", querry(y)-querry(x-1));
else
update(x,y);
}
}
return 0;
}