Cod sursa(job #226387)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 1 decembrie 2008 17:17:13
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <math.h>
#include <algorithm>

using namespace std;

long i, j, n, t, gef[3510];

struct NOD {
	long a, b, c;
};

NOD wef[3600];

bool _cmp(NOD c, NOD d) {  
    if (c.a < d.a)  
        return true;  
    return false;        
} 

long _check(long poz, long P) {
	if (wef[poz].b > wef[P].b && wef[poz].c > wef[P].c) {
		return 1;
	}
	return 0;
}

long _Bsearch(long ls, long ld, long P) {
	long mid = 0, poz = 0;
	while (ls <= ld) {
		mid = (ls + ld) / 2;
		if (_check(gef[mid], P)) {
			poz = mid;
			ld = mid - 1;
		} else {
			ls = mid + 1;
		}
	}
	return poz;
}

long _Fscmax() {
	long con = 0;
	memset(gef, 0, sizeof(gef));
	for (long i = 1; i <= n; ++i) {
		long aux = _Bsearch(1, con, i);
		if (aux) {
			gef[aux] = i;
		} else {
			gef[++con] = i;
		}
	}
	return con;
}

int main() {
	freopen("cutii.in", "r", stdin);
	freopen("cutii.out", "w", stdout);
	scanf("%ld %ld", &n, &t);
	for (i = 1; i <= t; ++i) {
		for (j = 1; j <= n; ++j) {
			scanf("%ld %ld %ld", &wef[j].a, &wef[j].b, &wef[j].c);
		}
		sort(wef + 1, wef + n + 1, _cmp);
		printf("%ld\n", _Fscmax());
	}
	return 0;
}