Cod sursa(job #1206477)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 10 iulie 2014 10:58:14
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>

using namespace std;

const int DIM = 1000000;
int AIB[DIM+5], N, M;

void Upgrade(int i, int Val)
{
	for(; i <= N; i+=i&-i)
	AIB[i] -= Val;
}

void AddElement(int i, int Val)
{
	for(; i<= N; i+=i&-i)
	AIB[i] += Val;
}

int Query(int i)
{
	int S=0;
	for(; i; i-=i&-i) S+=AIB[i];
	return S;
}

int QueryAB(int Begin, int End)
{
	return Query(End) - Query(Begin-1);
}

int main()
{
	freopen("AIB.in", "r", stdin);
	freopen("AIB.out", "w", stdout);

	int i, Aux, Type, A1, A2;
	scanf("%d %d", &N, &M);
	for(i=1; i<=N; i++)
	{
		scanf("%d", &Aux);
		AddElement(i,Aux);
	}
	for(i=1; i<=M; i++)
	{
		scanf("%d %d %d", &Type, &A1, &A2);
		if(!Type) Upgrade(A1,A2);
		else printf("%d\n", QueryAB(A1,A2));
	}

	return 0;
}