Cod sursa(job #727672)

Utilizator fhandreiAndrei Hareza fhandrei Data 28 martie 2012 10:33:38
Problema Gardieni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
//Include
#include <fstream>
using namespace std;

//Definitii
#define leftSon node<<1
#define rightSon (node<<1)+1

//Constante
const int MAX_T = (int)1e6+1;

//Functii
void update(int, int, int);

//Variabile
ifstream in("gardieni.in");
ofstream out("gardieni.out");

int n, t;
int iLeft, iRight;
int poz, val;
int tree[MAX_T<<2];

//Main
int main()
{
	in >> n >> t;
	for(int i=1 ; i<=n ; ++i)
	{
		in >> iLeft >> iRight >> val;
		for(poz=iLeft ; poz<=iRight ; ++poz)
			update(1, 1, t);
	}
	
	out << tree[1];
	
	in.close();
	out.close();
	return 0;
}

void update(int node, int left, int right)
{
	if(left == right)
		{	tree[node] = val; return;	}
	
	int mid = (left + right) >> 1;
	if(poz <= mid)
		update(leftSon, left, mid);
	else
		update(rightSon, mid+1, right);
	
	tree[node] = tree[leftSon] + tree[rightSon];
}