Pagini recente » Cod sursa (job #2413721) | Cod sursa (job #2309670) | Cod sursa (job #1781319) | Cod sursa (job #355405) | Cod sursa (job #1518542)
#include <cstdio>
#include <algorithm>
#define DIM 4096
#define x first
#define y second.first
#define z second.second
using namespace std;
pair <int, pair <int, int> > M[DIM];
int AIB[DIM][DIM], N, T, maxim, val;
inline int ub(int x)
{
return (x&(-x));
}
int query (int p1, int p2)
{
int nr = 0;
for (int i = p1; i >= 1; i -= ub(i))
for (int j = p2; j >= 1; j -= ub(j))
nr = max (nr, AIB[i][j]);
return nr;
}
void update (int p1, int p2, int nr)
{
for (int i = p1; i <= N; i += ub(i))
for (int j = p2; j <= N; j += ub(j))
AIB[i][j] = max (AIB[i][j], nr);
return;
}
void setVal (int p1, int p2, int nr)
{
for (int i = p1; i <= N; i += ub(i))
for (int j = p2; j <= N; j += ub(j))
AIB[i][j] = 0;
return;
}
int main ()
{
freopen ("cutii.in" ,"r", stdin );
freopen ("cutii.out","w", stdout);
scanf ("%d %d", &N, &T);
for (int t = 1; t <= T; t ++)
{
for (int i = 1; i <= N; i ++)
{
scanf ("%d", &M[i].x);
scanf ("%d", &M[i].y);
scanf ("%d", &M[i].z);
}
sort (M + 1, M + N + 1);
maxim = 0;
for (int i = 1; i <= N; i ++)
{
val = query(M[i].y - 1, M[i].z - 1);
update (M[i].y, M[i].z, val + 1);
maxim = max (maxim, val + 1);
}
printf ("%d\n", maxim);
for (int i = 1; i <= N; i ++)
setVal (M[i].y, M[i].z, 0);
}
fclose (stdin );
fclose (stdout);
return 0;
}