Pagini recente » gardening | Profil M@2Te4i | Profil M@2Te4i | Monitorul de evaluare | Cod sursa (job #1551159)
#include <fstream>
#include <vector>
#define MAXN 15001
using namespace std;
int zeroes(int x)
{
return (x ^ (x - 1)) & x;
}
void Update(vector<int> &BIT, int N, int index, int value)
{
for (int i = index; i <= N; i += zeroes(i))
{
BIT[i] += value;
}
}
int Query(vector<int> BIT, int N, int x)
{
int sum = 0;
for (int i = x; i > 0; i -= zeroes(i))
{
sum += BIT[i];
}
return sum;
}
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N, M, i, a, b, c;
fin >> N >> M;
vector<int> bit(N + 1,0);
for (i = 1; i <= N; i++)
{
fin >> a;
Update(bit, N, i, a);
}
for (i = 1; i <= M; i++)
{
fin >> a >> b >> c;
if (a == 1)
{
fout << Query(bit, N, c) - Query(bit, N, b - 1) << endl;
}
else
{
Update(bit, N, b, -c);
}
}
fin.close();
fout.close();
return 0;
}