Pagini recente » Cod sursa (job #1448017) | Borderou de evaluare (job #2442143) | Cod sursa (job #2601906) | Cod sursa (job #1696785) | Cod sursa (job #1447564)
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int N, M, tip, a, b, val, start, finish, poz, sum, V[3 * 15010];
void Update(int nod, int left, int right)
{
if (left == right)
{
V[nod] += val;
return;
}
int mid = (left + right) / 2;
if (poz <= mid) { Update(nod * 2, left, mid); }
else { Update(nod * 2 + 1, mid + 1, right); }
V[nod] = V[nod * 2] + V[nod * 2 + 1];
}
void Query(int nod, int left, int right)
{
if (left >= start && right <= finish)
{
sum += V[nod];
return;
}
int mid = (left + right) / 2;
if (start <= mid) { Query(nod * 2, left, mid); }
if (finish > mid) { Query(nod * 2 + 1, mid + 1, right); }
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++) {
fin >> val;
poz = i;
Update(1, 1, N);
}
for (int i = 1; i <= M; i++) {
fin >> tip >> a >> b;
if (!tip)
{
poz = a;
val = b * (-1);
Update(1, 1, N);
}
else
{
start = a;
finish = b;
sum = 0;
Query(1, 1, N);
fout << sum << '\n';
}
}
fout.close();
return 0;
}