Pagini recente » Cod sursa (job #563955) | Cod sursa (job #2100834) | Cod sursa (job #2525306) | Cod sursa (job #2124311) | Cod sursa (job #129410)
Cod sursa(job #129410)
#include<stdio.h>
FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");
int c[15005],n,m;
int nrzero(int x)
{
int nr=0;
while(x%2==0) { ++nr; x=x/2; }
return nr;
}
void modificare(int x, int p, int xx) //aduna x pe pozitia lui p.
{
int i,k;
while(p<=n)
{
c[p]=c[p]+xx*x;
// k=nrzero(p);
p+=p^(p-1)&p;
}
}
int suma(int p) //returneaza suma secventei [1,p];
{
int s=0,k;
while(p>0)
{
s+=c[p];
//k=nrzero(p);
p-=p^(p-1)&p;
}
return s;
}
int interogare(int p, int k) //suma secventei [p,k]
{
int s1=suma(p-1);
int s2=suma(k);
return s2-s1;
}
int main()
{
int i,cod,x,y,sol;
n=4;
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
modificare(x,i,1);
}
while(m)
{
fscanf(f,"%d %d %d",&cod,&x,&y);
if(cod==1)
{
sol=interogare(x,y);
fprintf(g,"%d\n",sol);
}
else
{
modificare(y,x,-1);
}
--m;
}
return 0;
}