Pagini recente » Cod sursa (job #924659) | Cod sursa (job #2239698) | Cod sursa (job #2607381) | Cod sursa (job #2091832) | Cod sursa (job #903222)
Cod sursa(job #903222)
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int maxn = 15002;
int N, M;
int sume[maxn];
void update(int val, int ind)
{
int poz = 0;
while (ind <= N)
{
sume[ind] += val;
poz = ((ind ^ (ind - 1)) & ind);
ind += poz;
}
}
int findSum(int ind)
{
int poz = 0, sum = 0;
while (ind > 0)
{
sum += sume[ind];
poz = ((ind ^ (ind - 1)) & ind);
ind -= poz;
}
return sum;
}
int query(int st, int dr)
{
return findSum(dr) - findSum(st-1);
}
int main()
{
in >> N >> M; int cod, x, y;
for (int i = 1; i <= N; i++) { in >> x; update(x, i); }
for (int i = 1; i <= M; i++)
{
in >> cod;
if (cod == 0) {
in >> x >> y;
update(-y, x);
}
else {
in >> x >> y;
out << query(x, y) << '\n';
}
}
return 0;
}