Pagini recente » Cod sursa (job #2651840) | Cod sursa (job #2337352) | Cod sursa (job #1148719) | Cod sursa (job #2319048) | Cod sursa (job #2580189)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int N_MAX = 15e3 + 1;
int N, M;
long long segment_tree[4*N_MAX + 1];
void update(int value, int index, int left = 1, int right = N, int node = 1)
{
if(left == right)
{
segment_tree[node] += value;
return;
}
int middle = (left + right) / 2;
if(index <= middle)
{
update(value, index, left, middle, node * 2);
}
else
{
update(value, index, middle + 1, right, node * 2 + 1);
}
segment_tree[node] = segment_tree[node * 2] + segment_tree[node * 2 + 1];
}
long long query(int a, int b, int left = 1, int right = N, int node = 1)
{
if(a <= left && right <= b)
{
return segment_tree[node];
}
int middle = (left + right) / 2;
long long answer = 0;
if(a <= middle)
{
answer += query(a, b, left, middle, node * 2);
}
if(b > middle)
{
answer += query(a, b, middle + 1, right, node * 2 + 1);
}
return answer;
}
int main()
{
fin >> N >> M;
for(int i = 1; i <= N; ++i)
{
int value;
fin >> value;
update(value, i);
}
for(int i = 1; i <= M; ++i)
{
int code;
fin >> code;
if(code == 0)
{
int T, V;
fin >> T >> V;
update(-V, T);
}
if(code == 1)
{
int P, Q;
fin >> P >> Q;
fout << query(P, Q) << '\n';
}
}
}