Pagini recente » Cod sursa (job #2936548) | Cod sursa (job #1632191) | Cod sursa (job #2369860) | Cod sursa (job #1460611) | Cod sursa (job #1827526)
#include <fstream>
#define sz 15000
#define zeros(x) ( (x ^ (x - 1)) & x ) //cea mai mica putere a lui 2 care apartine lui x
using namespace std;
int n, m, type, day, val, leftDay, rightDay, aib[sz+1];
ifstream fin("datorii.in");
ofstream fout("datorii.out");
void Add(int aib[], int aibSize, int p, int val)
{
for (int i = p; i <= aibSize; i += zeros(i))
aib[i] += val;
}
int Compute(int aib[], int p)
{
int result = 0;
for (int i = p; i > 0; i -= zeros(i))
result += aib[i];
return result;
}
int Compute(int aib[], int left, int right)
{
return Compute(aib, right) - Compute(aib, left - 1);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> val;
aib[i] = zeros(i);
Add(aib, n, i, val);
}
for ( ; m; m--)
{
fin >> type;
if (type == 0)
{
fin >> day >> val;
Add(aib, n, day, -val);
}
else
{
fin >> leftDay >> rightDay;
fout << Compute(aib, leftDay, rightDay) << "\n";
}
}
return 0;
}