Pagini recente » Cod sursa (job #2185925) | Cod sursa (job #149824) | Cod sursa (job #1186284) | Cod sursa (job #2781264) | Cod sursa (job #251029)
Cod sursa(job #251029)
#include <stdio.h>
#define Nmax 100100
unsigned x[Nmax],n;
void up(unsigned poz,unsigned nr)
{
for (;poz<=n;poz+=poz&(poz-1)^poz)
x[poz] += nr;
}
unsigned q(unsigned poz)
{
unsigned ret=0;
for (;poz>0;poz-=poz&(poz-1)^poz)
ret += x[poz];
return ret;
}
void solve()
{
unsigned op;
scanf("%u", &op);
if (op==0)
{
unsigned a,b;
scanf("%u%u", &a,&b);
up(a,b);
}
else
if (op==1)
{
unsigned a,b;
scanf("%u%u", &a,&b);
printf("%u\n",q(b)-q(a-1));
}
else
{
unsigned ret=0, sum;
scanf("%u", &sum);
for (unsigned i=n;i>0;i/=2) if (ret+i <= n)
if (q(ret+i)<=sum) ret+=i;
printf("%u\n", ret);
}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
unsigned t,el;
scanf("%u%u", &n,&t);
for (int i=1;i<=n;++i)
{
scanf("%u", &el);
up(i,el);
}
while (t--) solve();
return 0;
}