Cod sursa(job #2332116)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 30 ianuarie 2019 13:33:16
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("cutii.in");
ofstream out("cutii.out");

struct Box
{
	int x, y, z;
};

bool cmp(Box a, Box b)
{
	return a.x < b.x;
}

const int DIM = 3507;

Box v[DIM];
int best[DIM];
int aib[DIM][DIM];

int n;

void update(int y, int z, int val)
{
	for(int i = y; i <= n; i += (i & -i))
		for(int j = z; j <= n; j += (j & -j))
			aib[i][j] = max(aib[i][j], val);
}

int query(int y, int z)
{
	int mx = 0;
	for(int i = y; i > 0; i -= (i & -i))
		for(int j = z; j > 0; j -= (j & -j))
			mx = max(mx, aib[i][j]);
	
	return mx;
}

void reset()
{
	memset(aib, 0, sizeof(aib));
}

int main()
{
	int t;
	in >> n >> t;
	
	while(t--)
	{
		for(int i = 1; i <= n; i++)
		{
			in >> v[i].x >> v[i].y >> v[i].z;
		}
		
		sort(v + 1, v + 1 + n, cmp);
		
		int mx = 0;
		
		for(int i = 1; i <= n; i++)
		{
			best[i] = query(v[i].y, v[i].z) + 1;
			mx = max(mx, best[i]);
			update(v[i].y, v[i].z, best[i]);
		}
		
		out << mx << '\n';
		reset();
	}
}