Cod sursa(job #2628258)

Utilizator dream3rDavid Pop dream3r Data 15 iunie 2020 11:35:57
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
//#include "pch.h"
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
#include <climits>
#include <queue>
#define ll long long int
#define nr 100005
using namespace std;
ifstream f("datorii.in");
ofstream o("datorii.out");
int abi[nr];
int v[nr];
int n, m;
int pos, val;
int x, y, cer;
int start, finish;


void build(int nod, int stanga, int dreapta)
{

	if (stanga == dreapta)
	{
		abi[nod] = val;
		return;
	}

	int mid = (stanga + dreapta) / 2;

	if (pos <= mid)
	{
		build(nod * 2, stanga, mid);
	}
	else
	{
		build(nod * 2 + 1, mid + 1, dreapta);
	}

	abi[nod] = abi[2 * nod] + abi[2 * nod + 1];
}

int querry(int nod, int stanga, int dreapta)
{
	if (start <= stanga && dreapta <= finish)
	{
		return abi[nod];
	}

	int mid = (stanga + dreapta) / 2;
	int ans = 0;
	if (start <= mid)
	{
		ans += querry(2 * nod, stanga, mid);
	}
	if (mid < finish)
	{
		ans += querry(2 * nod + 1, mid + 1, dreapta);
	}
	return ans;
}





int main()
{

	f >> n >> m;
	for (size_t i = 1; i <= n; i++)
	{
		f >> x;
		v[i] = x;
		pos = i;
		val = x;
		build(1, 1, n);
	}

	for (size_t i = 1; i <= m; i++)
	{
		f >> cer >> x >> y;
		if (cer == 1)
		{
			//	ans = 0;
			start = x;
			finish = y;
			o << querry(1, 1, n) << "\n";
		}

		else
		{
			pos = x;
			val = v[x] - y;
			build(1, 1, n);
		}


	}

}