Pagini recente » Cod sursa (job #694560) | Cod sursa (job #1528387) | Cod sursa (job #830879) | Cod sursa (job #1238847) | Cod sursa (job #1171485)
//code by Vasilut
#include<fstream>
#include<algorithm>
#include<vector>
#define NN 3550
using namespace std;
ofstream out("cutii.out");
int n , m , L[NN] , l[NN] , h[NN] , v[NN];
void quick(long int li, long int ls)
{
long int i , j , x , y;
i=li;
j=ls;
x=v[(li+ls)/2];
while (i<=j)
{
while (v[i]>x) i++;
while (v[j]<x) j--;
if (i<=j)
{
y=v[i];
v[i]=v[j];
v[j]=y;
y=l[i];
l[i]=l[j];
l[j]=y;
y=L[i];
L[i]=L[j];
L[j]=y;
y=h[i];
h[i]=h[j];
h[j]=y;
i++;
j--;
}
}
if (i<ls)
quick(i,ls);
if (j>li)
quick(li,j);
}
int intra(long int i , long int j )
{
long int gasit = 1;
if ( l[i] > l[j] && L[i] > L[j] && h[i] > h[j] )
gasit = 0;
return gasit;
}
int main()
{
ifstream in("cutii.in");
long int n , m;
in >> n >> m;
for(int i=1 ; i<=m ; i++)
{
for(int j=1 ; j<=n ; j++ )
in >> l[j] >> L[j] >> h[j];
for(int j=1; j<=n ; j++)
v[j] = l[j] * L[j] * h[j];
quick(1,n);
for (int j=1;j<=n+2;j++)
v[j]=0;
v[n]=1;
long int maxx=0;
for (int j=n-1 ; j>=1 ; j-- )
{
maxx=0;
for (int k =j+1;k<=n;k++)
if (v[k]>=maxx && intra(j,k)==0 )
{
maxx=v[k];
break;
}
v[j]=maxx+1;
}
maxx=0;
for (int j=1 ; j<=n ; j++)
if (maxx<=v[j])
maxx=v[j];
out <<maxx << '\n';
}
return 0;
}