Pagini recente » Cod sursa (job #190719) | Cod sursa (job #2150643) | winners6 | Cod sursa (job #822629) | Cod sursa (job #2901842)
#include <iostream>
#include <fstream>
#include <cstring>
#define notlocal 1
#if !notlocal
#include <iostream>
#define std::cin fin
#define std::cout fout
#else
#include <fstream>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
#endif
using namespace std;
const int NMAX = 15e3;
int arbint[5 * NMAX + 5];
void update(int target, int val, int st, int dr, int poz)
{
int mid = (st + dr) / 2;
arbint[poz] += val;
if (st == dr)
{
return;
}
if (target <= mid)
{
update(target, val, st, mid, poz * 2);
}
else
{
update(target, val, mid + 1, dr, poz * 2 + 1);
}
}
int query(int target_st, int target_dr, int st, int dr, int poz)
{
int s = 0;
int mid = (st + dr) / 2;
if (st >= target_st && dr <= target_dr)
{
return arbint[poz];
}
if (target_st <= mid)
{
s += query(target_st, target_dr, st, mid, poz * 2);
}
if (target_dr > mid)
{
s += query(target_st, target_dr, mid + 1, dr, poz * 2 + 1);
}
return s;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
fin >> n >> m;
int x;
for (int i = 1; i <= n; ++i)
{
fin >> x;
update(i, x, 1, n, 1);
}
int y, z;
while (m--)
{
fin >> x >> y >> z;
if (!x)
{
update(y, -z, 1, n, 1);
}
else
{
fout << query(y, z, 1, n, 1) << '\n';
}
}
return 0;
}