Pagini recente » Cod sursa (job #1631611) | Cod sursa (job #2337921) | Cod sursa (job #2932262) | Cod sursa (job #1897877) | Cod sursa (job #429860)
Cod sursa(job #429860)
#include <iostream>
#define IN "aib.in"
#define OUT "aib.out"
#define zeroz(x) ((x^(x-1))&x)
#define Lg 100100
using namespace std;
int arb[Lg], N, M;
void add(int inc,int val)
{
for(;inc<=N;inc+=zeroz(inc))
arb[inc]+=val;
}
void citire()
{
int val;
scanf("%d %d",&N,&M);
for(int i=1;i<=N;i++)
{
cin>>val;
add(i,val);
}
}
int suma(int a)
{
int s=0;
for(int i=a;i>0;i-=zeroz(i))
s+=arb[i];
return s;
}
int poz(int a)
{
int i,p;
for(i=1,p=1;i<=N;i++)
{
if(arb[p]==a)
return p;
p+=zeroz(p);
if(p>N)
p=i;
}
return 0;
}
void solve()
{
int op,a,b;
for(int i=1;i<=M;i++)
{
scanf("%d",&op);
if(op==0)
{
scanf("%d %d",&a,&b);
add(a,b);
}
else if(op==1)
{
scanf("%d %d",&a,&b);
printf("%d\n",suma(b)-suma(a-1));
}
else if(op==2)
{
scanf("%d",&a);
printf("%d\n",poz(a));
}
}
}
int main ()
{
freopen (IN,"r",stdin);
freopen (OUT,"w",stdout);
citire();
solve();
return 0;
}