Pagini recente » Cod sursa (job #525951) | Cod sursa (job #2716493) | Cod sursa (job #3158888) | Cod sursa (job #1735125) | Cod sursa (job #1151902)
#include <fstream>
#include <string.h>
using namespace std;
const int Nmax = 4*15000;
int A[Nmax];
int sum, pw = 1, a, b;
void update(int pos, int num)
{
int t = pos + pw -1;
A[t] -= num;
while (t /= 2)
{
A[t] = A[2*t] + A[2*t+1];
}
}
void querry(int nod, int st, int dr)
{
if (a <= st && dr <= b)
{
sum += A[nod];
return;
}
int mid = (st + dr) / 2;
if (a <= mid) querry(2*nod, st, mid);
if (mid < b) querry(2*nod+1, mid+1, dr);
}
int main()
{
ifstream f ("datorii.in");
ofstream g ("datorii.out");
int N, M, q;
f >> N >> M;
memset(A, 0, sizeof(A));
pw = 1;
while (pw < N) pw *= 2;
for (int i = 0; i < N; i++)
f >> A[pw + i];
for (int i = pw - 1; i; i--)
A[i] = A[2*i] + A[2*i+1];
while(M--)
{
f >> q >> a >> b;
if (q == 0) update(a, b);
else
{
sum = 0;
querry(1, 1, pw);
g << sum << '\n';
}
}
return 0;
}