Pagini recente » Cod sursa (job #301059) | Cod sursa (job #1389235) | Cod sursa (job #1555815) | Cod sursa (job #332347) | Cod sursa (job #571271)
Cod sursa(job #571271)
#include<fstream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int aib[15010],v[15010];
int n,m;
//functia incrementeaza v[x] cu 'val' in arborele indexat binar
void add(int x,int val)
{
int i;
for (i=x;i<=n;i+=zeros(i))
aib[i]+=val;
}
//calculeaza suma elementelor pe intervalul [1,x]
int suminterval(int x)
{
int i,s=0;
for (i=x;i>0;i-=zeros(i))
s+=aib[i];
return s;
}
int main()
{
int i,op,k,j,s;
ifstream in("datorii.in");
in>>n>>m;
for (i=1;i<=n;i++)
{
in>>v[i];
add(i,v[i]);
}
ofstream out("datorii.out");
for (i=1;i<=m;i++)
{
in>>op>>k>>j;
if (op)
{
s=suminterval(j);
s-=suminterval(k-1);
out<<s<<'\n';
}
else
{
v[k]-=j;
add(k,-j);
}
}
}