Pagini recente » Cod sursa (job #691390) | Cod sursa (job #2026460) | Cod sursa (job #1651818) | Cod sursa (job #274046) | Cod sursa (job #2414140)
#include <bits/stdc++.h>
#define maxn 3500
//#define aaa system("pause");
using namespace std;
struct dim
{
int d[3];
};
vector<int> cap[maxn+5]; /// cap[i] contine indicele capetelor subsirurilor de lungime i
dim v[maxn+5];
bool diff ( int i, int j ) /// 1 pt i in j
{
int a = 0;
while ( a < 3 && v[i].d[a] < v[j].d[a] ) a++;
return a == 3;
}
int main ()
{
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
int n, t; fin >> n >> t;
int i, j, z, pas, m = 1, sz;
while (t--)
{
for ( i = 1; i <= n; i++ ) fin >> v[i].d[0] >> v[i].d[1] >> v[i].d[2];
cap[1].push_back (1);
for ( m = 1, i = 2; i <= n; i++ )
{
for ( pas = (1<<30), j = 0; pas > 0; pas /= 2 )
if ( j + pas <= m )
{
z = 0; sz = cap[j+pas].size();
while ( z < sz && diff(cap[j+pas][z], i) == 0 ) z++;
if ( z < sz ) j += pas;
}
cap[j+1].push_back (i);
z = 0; sz = cap[1].size();
while ( z < sz && diff(i,cap[1][z]) == 0 ) z++;
if ( z < sz ) cap[1].push_back (i);
if ( m == j ) m++;
}
fout << m << '\n';
for ( i = 0; i <= m; i++ ) cap[i].clear();
}
fin.close ();
fout.close ();
return 0;
}