Cod sursa(job #2768082)

Utilizator Darius_CDarius Chitu Darius_C Data 9 august 2021 14:29:08
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
// Datorii.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
// Arbori indexati binar (Fenwick Tree)

#include <iostream>
#include <fstream>
#pragma warning(disable: 4996)
#define DIM 15006
#define POW2 16384
using namespace std;

#define zeros(x) ((x ^ (x - 1))& x)

FILE* fin, * fout;

int N, M;
int V[DIM], AIB[1 + POW2];

static inline void Read()
{
	fscanf(fin, "%d %d", &N, &M);
	int x;
	for (int i = 1; i <= N; i++)
	{
		fscanf(fin, "%d", &x);
		V[i] = V[i - 1] + x;
	}
	for (int i = 1; i <= N; i++)
		AIB[i] = V[i] - V[i - zeros(i)];
}


void Add(int x, int quantity)
{
	for (int i = x; i <= N; i += zeros(i))
		AIB[i] += quantity;
}

int Compute(int x)
{
	int ret = 0;
	for (int i = x; i > 0; i -= zeros(i))
		ret += AIB[i];
	return ret;
}

static inline void Solve()
{
	for (int op; M; M--)
	{
		fscanf(fin, "%d", &op);
		if (op == 0)
		{
			int T, V;
			fscanf(fin, "%d %d", &T, &V);
			Add(T, -V);
		}
		else if (op == 1)
		{
			int P, Q;
			fscanf(fin, "%d %d", &P, &Q);
			int query = Compute(Q) - Compute(P - 1);
			fprintf(fout, "%d\n", query);
		}
	}
}

int main()
{
	fin = fopen("datorii.in", "r");
	fout = fopen("datorii.out", "w");
	Read();
	Solve();
	fclose(fin);
	fclose(fout);
	return 0;
}