Cod sursa(job #2325002)

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

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

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

void clean(int x,int y)
{
	int i,j;
	for(i=x;i<=n;i+=zero(i))
		for(j=y;j<=n;j+=zero(j))
			aib[i][j]=0;
}
void add(int x,int y,int id)
{
	int i,j;
	for(i=x;i<=n;i+=zero(i))
		for(j=y;j<=n;j+=zero(j))
			if(r[aib[i][j]]<r[id])
				aib[i][j]=id;
}
int query(int x,int y)
{
	int i,j,mx=0;
	for(i=x;i>0;i-=zero(i))
		for(j=y;j>0;j-=zero(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);
	}
}