Pagini recente » Cod sursa (job #458489) | Cod sursa (job #859770) | Cod sursa (job #1020515) | Cod sursa (job #1926646) | Cod sursa (job #1496864)
#include <cstdio>
using namespace std;
const int N=100005;
int aib[N];
int aibsize;
void ad(int x,int val)
{
while(x<=aibsize)
{
aib[x]=aib[x]+val;
x=x+(x&(-x));
}
}
int suma(int x)
{
int sum=0;
while(x>=1)
{
sum=sum+aib[x];
x=x&(x-1);
}
return sum;
}
int main()
{
FILE *in,*out;
in=fopen("aib.in","r");
out=fopen("aib.out","w");
int n,m,i,x,cod,y,put,ras;
fscanf(in,"%d%d",&n,&m);
aibsize=n;
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&x);
ad(i,x);
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&cod);
if(cod==2)
{
fscanf(in,"%d",&x);
put=1<<20;
ras=0;
while(put>=1)
{
if(ras+put<=n && suma(ras+put)<=x)
{
ras=ras+put;
}
put=put/2;
}
fprintf(out,"%d\n",ras);
}
else
{
fscanf(in,"%d%d",&x,&y);
{
if(cod==0)
{
ad(x,y);
}
if(cod==1)
{
fprintf(out,"%d\n",suma(y)-suma(x-1));
}
}
}
}
return 0;
}