Pagini recente » Cod sursa (job #537924) | Cod sursa (job #1378263) | Cod sursa (job #910487) | Cod sursa (job #103582) | Cod sursa (job #1767765)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#define NMAX 3505
using namespace std;
int aib[NMAX][NMAX];
struct str
{
int a, b, c;
};
str v[NMAX + 2];
int lsb (int x)
{
return x & (-x);
}
void update (int x, int y, int val)
{
while (x <= NMAX)
{
int y1 = y;
while (y1 <= NMAX)
{
aib[x][y1] = max (aib[x][y1], val);
y1 += lsb (y1);
}
x += lsb (x);
}
}
int query (int x, int y)
{
int sol = 0;
while (x > 0)
{
int y1 = y;
while (y1 > 0)
{
sol = max (sol, aib[x][y1]);
y1 -= lsb (y1);
}
x-= lsb(x);
}
return sol;
}
bool cmp (str aa, str bb)
{
return aa.a < bb.a;
}
int main ()
{
int T,n;
ifstream cin ("cutii.in");
ofstream cout ("cutii.out");
cin >> n >> T;
while (T)
{
memset (aib, 0, sizeof(aib));
T--;
int sol = 0;
for (int i = 1;i <= n; i++)
cin >> v[i].a >> v[i].b >> v[i].c;
sort (v + 1, v + 1 + n, cmp);
int db = 1;
for (int i = 1; i <= n; i++)
{
int q = query (v[i].b - 1, v[i].c - 1);
sol = max (sol, q + 1);
update (v[i].b, v[i].c, q + 1);
}
cout << sol << "\n";
}
return 0;
}