Pagini recente » Monitorul de evaluare | Diferente pentru runda/summer2020 intre reviziile 2 si 1 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1551152)
#include <fstream>
#define MAXN 15001
#define MAXM 100001
using namespace std;
int zeroes(int x)
{
return (x ^ (x - 1)) & x;
}
void Update(int BIT[], int N, int index, int value)
{
for (int i = index; i <= N; i += zeroes(i))
{
BIT[i] += value;
}
}
int Query(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;
int bit[MAXN];
fin >> N >> M;
for (i = 0; i <= N; i++)
{
bit[i] = 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;
}