Pagini recente » Cod sursa (job #766856) | Cod sursa (job #1781874) | Profil FlorinHaja | Cod sursa (job #993463) | Cod sursa (job #495566)
Cod sursa(job #495566)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define nmax 3505
#define x first
#define y second.first
#define z second.second
using namespace std;
typedef pair <int, pair <int, int> > iii;
int n, a [nmax], aib [nmax] [nmax];
iii v [nmax];
inline int p0 (int a)
{return a^(a & (a-1));}
inline int max (int a, int b)
{return (a>b)? a:b;}
int query (int n, int m)
{
int i, j, k=0;
for (i=1; i <= n; i += p0 (i))
for (j=1; j <= m; j += p0 (j))
k=max (k, aib [i] [j]);
return k;
}
void update (int n, int m, int v)
{
int i, j;
for (i=n; i >= 1; i -= p0 (i))
for (j=m; j >= 1; j -= p0 (j))
aib [i] [j]=v;
}
void init ()
{
int i, j, k;
for (i=1; i <= n; ++i)
for (j=v [i].y; j >= 1; j -= p0 (j))
for (k=v [i].z; k >= 1; k -= p0 (k))
aib [j] [k]=0;
}
void solve ()
{
sort (v+1, v+n+1);
int i;
for (i=1; i <= n; ++i)
{
a [i]=query (v [i].y, v [i].z)+1;
update (v [i].y, v [i].z, a [i]);
}
init ();
}
int main ()
{
freopen ("cutii.in", "r", stdin);
freopen ("cutii.out", "w", stdout);
int i, j, t;
scanf ("%d%d", &n, &t);
for (i=1; i <= t; ++i)
{
for (j=1; j <= n; ++j) scanf ("%d%d%d", &v [j].x, &v [j].y, &v [j].z);
solve ();
printf ("%d\n", a [n]);
}
return 0;
}