Pagini recente » Cod sursa (job #2961768) | Cod sursa (job #696670)
Cod sursa(job #696670)
#include <stdio.h>
#include <iostream>
#define ifile "datorii.in", "r"
#define ofile "datorii.out", "w"
#define getf fscanf
#define putf fprintf
using namespace std;
FILE * f=fopen(ifile);
FILE * g=fopen(ofile);
#define NMax 300101
int N, M, A[NMax];
int Zero(int i)
{
int k = 0;
while((i & 1) == 0)
{
k++;
i>>=1;
}
return 1<<k;
}
int Add(int i, int v)
{
while(i <= N)
{
A[i] += v;
i += Zero(i);
}
return 0;
}
int Query(int i)
{
int sum = 0;
while(i)
{
sum += A[i];
i -= Zero(i);
}
return sum;
}
int Sum(int i, int j)
{
return (Query(j) - Query(i-1));
}
int op0(int t, int v)
{
Add(t, -v);
return 0;
}
int op1(int p, int q)
{
putf(g, "%d\n", Sum(p, q));
return 0;
}
int step1()
{
getf(f, "%d %d", &N, &M);
for(int i = 1; i <= N; i++)
{
int a;
getf(f, "%d", &a);
Add(i, a);
}
return 0;
}
int step2()
{
for(int i = 0; i < M; i++)
{
int op, a, b;
getf(f, "%d %d %d", &op, &a, &b);
if(op) op1(a,b);
else op0(a,b);
}
return 0;
}
int main()
{
step1();
step2();
return 0;
}