Pagini recente » Cod sursa (job #2139547) | Clasament utcn-2023 | Cod sursa (job #278799) | Cod sursa (job #1318909) | Cod sursa (job #1259753)
#include <cstdio>
using namespace std;
const int NMAX=100005;
int aib[NMAX],n;
inline void update(int poz, int val)
{
for( ;poz <= n; poz+=poz&-poz)
aib[poz]+=val;
}
inline int query(int poz)
{
int s=0;
for( ;poz ;poz-=poz&-poz)
s+=aib[poz] ;
return s ;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int n,m,val,op,a,b;
for(int i=1;i<=n;i++)
{
scanf("%d",&val);
update(i,val);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
if(op==0)
{
scanf("%d%d",&a,&b);
update(a,b);
}
else
{
if(op==1)
{
scanf("%d%d",&a,&b);
printf("%d\n",query(b)-query(a-1));
}
else
{
scanf("%d",&a);
int st=1,dr=n;
int ans=-1;
while(st<=dr)
{
int mid=(st+dr)/2;
int x = query(mid);
if(x>=a)
{
if(x==a)
{
ans=mid;
break;
}
dr=mid-1;
}
else
st=mid+1;
}
printf("%d\n",ans);
}
}
}
return 0;
}