Pagini recente » Cod sursa (job #1245933) | Cod sursa (job #773275) | Cod sursa (job #3239176) | Cod sursa (job #86943) | Cod sursa (job #2827345)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int aib[15005];
int n;
int suma(int x)
{
int s=0,p=0;
while (x>=1){
while(x>0)
{
int k=1;
while (k<=x)
k*=2;
k/=2;
x-=k;
p+=k;
s+=aib[p];
}
if (x==1)
return s+aib[p+1];
return s;
}
return s;
}
int sumaintervale(int x, int y)
{
return suma(y)-suma(x-1);
}
void adaugavaloare(int x,int val)
{
while(x<=n)
{
aib[x]-=val;
int k=1;
int aux=x;
while (aux%2==0)
{
aux/=2;
k*=2;
}
x+=k;
}
}
int main()
{
long long m;
in >>n;
in >>m;
int v[15001];
for (int i=1;i<=n;i++)
{
aib[i]=0;
}
int x;
for (int i=1;i<=n;i++)
{
in>>x;
adaugavaloare(i,-x);
}
for (int i=1;i<=m;i++)
{
int A;
in >>A;
if (A==1)
{
int st,dr;
in >>st>>dr;
out << sumaintervale(st,dr)<<endl;
}
if (A==0)
{
int zi,valoare;
in >> zi >> valoare;
adaugavaloare(zi,valoare);
}
}
return 0;
}