Cod sursa(job #805439)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 31 octombrie 2012 14:54:22
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
using namespace std;

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

cutie a[3501];
int v[3501][3501],i,o,t,n,mx,s,j;

bool cmp(cutie a,cutie b)
{
	return a.z<b.z;
}

int query(int x,int y)
{
	int i,j,s=0;
	for (i=x;i>0;i=i & (i-1))
		for (j=y;j>0;j=j & (j-1))
			s=max(s,v[i][j]);
	return s;
}

void update(int x,int y,int z)
{
	int i,j;
	for (i=x;i<=n;i=(i | (i-1))+1)
		for (j=y;j<=n;j=(j | (j-1))+1)
			v[i][j]=max(v[i][j],z);
}

int main()
{
	ifstream f("cutii.in");
	ofstream g("cutii.out");
	f >> n >> t;
	for (o=1;o<=t;o++)
	{
		mx=0;
		for (i=1;i<=n;i++)
			f >> a[i].x >> a[i].y >> a[i].z;
		sort(a+1,a+n+1,cmp);
		for (i=1;i<=n;i++)
		{
			s=query(a[i].x,a[i].y);
			mx=max(s,mx);
			update(a[i].x,a[i].y,s+1);
		}
		g << mx+1 << "\n";
		for (i=1;i<=n;i++)
			for (j=1;j<=n;j++)
				v[i][j]=0;
	}
	return 0;
}