Cod sursa(job #2325007)

Utilizator shantih1Alex S Hill shantih1 Data 21 ianuarie 2019 20:57:24
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#define nmx 3505
#define zero(x) x&-x
#define sh short

using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");

sh n,i,j,t,nr,rez;
sh aib[nmx][nmx],r[nmx];
struct per	
{
	sh x,y,z;
	bool operator<(const per &alt)const
	{	return z<alt.z;	}
} v[nmx];

void clean(sh x,sh y)
{
	sh i,j;
	for(i=x;i<=n;i+=i&-i)
		for(j=y;j<=n;j+=j&-j)
			aib[i][j]=0;
}
void add(sh x,sh y,sh id)
{
	int i,j;
	for(i=x;i<=n;i+=i&-i)
		for(j=y;j<=n;j+=j&-j)
			if(r[aib[i][j]]<r[id])
				aib[i][j]=id;
}
sh query(sh x,sh y)
{
	sh i,j,mx=0;
	for(i=x;i>0;i-=i&-i)
		for(j=y;j>0;j-=j&-j)
			if(r[aib[i][j]]>r[mx])
				mx=aib[i][j];
	return r[mx];
}
int main() {
	
	fin>>n>>t;
	while(t--)
	{
		for(i=1;i<=n;i++)
			fin>>v[i].x>>v[i].y>>v[i].z;
		
		sort(v+1,v+n+1);
		memset(r,0,sizeof(r));
		
		rez=0;
		for(i=1;i<=n;i++)
		{
			r[i]=query(v[i].x,v[i].y)+1;
			add(v[i].x, v[i].y, i);
			rez=max(rez,r[i]);
		}
		fout<<rez<<"\n";
		
		for(i=1;i<=n;i++)
			clean(v[i].x, v[i].y);
	}
}