Pagini recente » Cod sursa (job #1809731) | Cod sursa (job #302022) | Cod sursa (job #1184914) | Cod sursa (job #2307345) | Cod sursa (job #259769)
Cod sursa(job #259769)
#include <stdio.h>
int A[100001],B,S,k,x,n,m;
void update(int p,int val)
{
while (p<=n)
{
A[p]+=val;
p += p&(p^(p-1));
}
}
int sum(int p)
{
int S=0;
while (p>0)
{
S = S+A[p];
p -= p&(p^(p-1));
}
return S;
}
int min(int st,int dr)
{
int m,b;
if (st>dr) return -1;
else {
m = (st+dr)/2;
b = sum(m);
if (b>S) return min(st,m-1);
else if (b<S) return min(m+1,dr);
else return m;
}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int i,j,p1,p2;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&B),update(i,B);
for (i=1;i<=m;i++)
{
scanf("%d",&x);
if (x==0) {
scanf("%d%d",&p1,&p2);
update(p1,p2);
}
else if (x==1) {
scanf("%d%d",&p1,&p2);
printf("%d\n",sum(p2)-sum(p1-1));
}
else {
scanf("%d",&S);
printf("%d\n",min(1,n));
}
}
}