Pagini recente » Cod sursa (job #2276919) | Cod sursa (job #894490) | Cod sursa (job #1997350) | Cod sursa (job #2069732) | Cod sursa (job #1376845)
# include <cstdio>
# define N 100010
# define zeros(x) (x&(-x))
using namespace std;
int n,aib[N],op,x,y,a,i,m;
void update(int poz, int val)
{
for(int i=poz; i<=n; i+=zeros(i))
aib[i]+=val;
}
int query(int poz)
{
int r=0;
for(int i=poz; i>=1; i-=zeros(i))
r+=aib[i];
return r;
}
int bs()
{
int st=1;
int dr=n;
while(st<=dr)
{
int m=(st+dr)>>1;
int x=query(m);
if(x==a)
{
while(query(m-1)==a)
m--;
return m;
}
else if(x<a) st=m+1;
else dr=m-1;
}
return st;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for(i=1; i<=n; ++i)
{
scanf("%d ", &x);
update(i,x);
}
for(i=1; i<=m; ++i)
{
scanf("%d ", &op);
if(op==1)
{
scanf("%d %d\n", &x, &y);
printf("%d\n", query(y)-query(x-1));
}
if(op==0)
{
scanf("%d %d\n", &x, &y);
update(x,y);
}
if(op==2)
{
scanf("%d\n", &a);
printf("%d\n", bs());
}
}
}