Pagini recente » Cod sursa (job #2765938) | Cod sursa (job #358691) | Cod sursa (job #1760865) | Cod sursa (job #2298256) | Cod sursa (job #1597717)
#include <cstdio>
#include <fstream>
#include <algorithm>
#define tt first
#define f second.tt
#define s second.second
using namespace std;
ifstream in("cutii.in");
ofstream g("cutii.out");
pair <int, pair <int, int> > v[3510];
int n,t,aib[3510][3510];
inline void add (int a, int b)
{
for (int i = a; i <= n; i += i & (-i))
for (int j = b; j <= n; j += j & (-j))
aib[i][j] = max (aib[i][j], aib[a][b]);
}
inline int querry (int a, int b)
{
int rez = 0;
for (int i = a - 1; i; i -= i & (-i))
for (int j = b - 1; j; j -= j & (-j))
rez = max (aib[i][j], rez);
return rez;
}
inline void del (int a, int b)
{
for (int i = a; i <= n; i += i & (-i))
for (int j = b; j <= n; j += j & (-j))
aib[i][j] = 0;
}
int main ()
{
in>>n>>t;
for (; t; --t)
{
for (int i = 1; i <= n; ++i)
in>>v[i].tt>>v[i].f>>v[i].s;
sort (v + 1, v + n + 1);
int rez = 0;
for (int i = 1; i <= n; ++i)
{
int x = querry (v[i].f, v[i].s) + 1;
aib[v[i].f][v[i].s] = x;
add (v[i].f, v[i].s);
rez = max (rez, x);
}
for (int i = 1; i <= n; ++i)
del (v[i].f, v[i].s);
g<<rez<<'\n';
}
in.close();
g.close();
return 0;
}