Pagini recente » Cod sursa (job #3205146) | Cod sursa (job #57120) | Cod sursa (job #2838834) | Cod sursa (job #1092374) | Cod sursa (job #2417986)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int A[500000];
int n,m,x,start,finish,pos,value,sum;
void First_Update_Tree (int node , int left , int right)
{
if (left == right)
{
A[node] = x;
return;
}
int mid = (left + right) / 2;
if (pos <= mid)
First_Update_Tree(2 * node, left, mid);
else First_Update_Tree(2 * node + 1, mid + 1, right);
A[node] = A[node * 2] + A[node * 2 + 1];
}
void Second_Update_Tree(int node, int left, int right)
{
if (left == right)
{
A[node] -= value;
return;
}
int mid = (left + right) / 2;
if (pos <= mid)
Second_Update_Tree(2 * node, left, mid);
else Second_Update_Tree(2 * node + 1, mid + 1, right);
A[node] = A[node * 2] + A[node * 2 + 1];
}
void Query (int node , int left, int right)
{
if (start <= left && right <= finish)
{
sum += A[node];
return;
}
int mid = (left + right) / 2;
if (start <= mid)
Query (2 * node, left, mid);
if (mid < finish)
Query (2 * node + 1, mid + 1, right);
}
int main()
{
ios_base::sync_with_stdio(false);
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> x;
pos = i;
First_Update_Tree(1, 1, n);
}
for (int i = 1; i <= m; i++)
{
fin >> x;
if (x == 0)
{
fin >> pos >> value;
Second_Update_Tree(1, 1, n);
}
if (x == 1)
{
fin >> start >> finish;
sum = 0;
Query(1, 1, n);
fout << sum << "\n";
}
}
return 0;
}