Pagini recente » Cod sursa (job #688763) | Istoria paginii runda/vot/voteaza_nargy_si_fumeanu | Cod sursa (job #2749410) | Istoria paginii runda/1234_4321 | Cod sursa (job #2451705)
#include <fstream>
#define MAX 15001
#define zeroes(i)(i & -i)
using namespace std;
int sp[MAX], aib[MAX];
void update(int n, int x, int val)
{
int i;
for(i = x; i <= n; i += zeroes(i))aib[i] -= val;
}
int compute(int st, int dr)
{
int i, sumaSt, sumaDr;
sumaDr = sumaSt = 0;
for(i = dr; i > 0; i -= zeroes(i))sumaDr += aib[i];
for(i = st - 1; i > 0; i -= zeroes(i))sumaSt += aib[i];
return sumaDr - sumaSt;
}
int main()
{
int n, m, i, a, b, c;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> n >> m;
for(i = 1; i <= n; i++)
{
fin >> a;
sp[i] = sp[i - 1] + a;
aib[i] = sp[i] - sp[i - zeroes(i)];
}
for(i = 0; i < m; i++)
{
fin >> a >> b >> c;
if(a == 1)fout << compute(b, c) << '\n';
else update(n, b, c);
}
fin.close();
fout.close();
return 0;
}