Pagini recente » Cod sursa (job #2085710) | Cod sursa (job #2339407) | Cod sursa (job #2796701) | Cod sursa (job #2551576) | Cod sursa (job #2044617)
#include <fstream>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
ofstream out("datorii.out");
int getParent(int index){
return index - (index & -index);
}
int getNext(int index){
return index + (index & -index);
}
int getSum(int vec[],int index){
int sum = 0;
while(index > 0) {
sum += vec[index];
index = getParent(index);
}
return sum;
}
void UpdateValue(int vec[],int index, int val,int dim){
while(index <= dim) {
vec[index] += val;
index = getNext(index);
}
}
void UpdateValue1(int vec[],int index, int val,int dim){
while(index <= dim) {
vec[index] -= val;
index = getNext(index);
}
}
int main()
{
int M,N;
FILE * f = fopen("datorii.in","r");
fscanf(f,"%d %d\n",&N,&M);
int BitTree[N+1];
memset(BitTree,0,sizeof(BitTree));
int x;
for(int i = 1; i <= N; i++)
{
fscanf(f,"%d ", &x);
UpdateValue(BitTree,i,x,N);
}
int nr,a,b;
for(int i = 0; i < M; i++)
{
fscanf(f,"%d\n",&nr);
if(nr == 0) {
fscanf(f,"%d %d\n",&a,&b);
UpdateValue1(BitTree,a,b,N);
}
else if (nr == 1) {
fscanf(f,"%d %d\n",&a,&b);
out << getSum(BitTree,b) - getSum(BitTree,a-1) << '\n';
}
}
return 0;
}