Cod sursa(job #727680)

Utilizator fhandreiAndrei Hareza fhandrei Data 28 martie 2012 10:40:30
Problema Gardieni Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 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;
const int oo = (int)15e8;

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

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

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

//Main
int main()
{
	in >> n >> t;
	limit = t * 4;
	for(int i=1 ; i<=limit ; ++i)
		tree[i] = oo;
	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] = min(val, tree[node]); 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];
}