Pagini recente » Cod sursa (job #3234976) | Cod sursa (job #2495167) | Cod sursa (job #3221614) | Cod sursa (job #2883705) | Cod sursa (job #1294939)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 4000;
int T, N, Aib[NMAX][NMAX], Dp[NMAX];
pair<int, pair<int, int> > Box[NMAX];
int LSB(int X)
{
return (X & (X - 1)) ^ X;
}
void Update(int X, int Y, int Val)
{
for(int i = X; i <= N; i += LSB(i))
for(int j = Y; j <= N; j += LSB(j))
Aib[i][j] = max(Aib[i][j], Val);
}
int Query(int X, int Y)
{
int Ans = 0;
for(int i = X; i; i -= LSB(i))
for(int j = Y; j; j -= LSB(j))
Ans = max(Ans, Aib[i][j]);
return Ans;
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%i %i", &N, &T);
for(; T; T --)
{
for(int i = 1; i <= N; ++ i)
for(int j = 1; j <= N; ++ j)
Aib[i][j] = 0;
for(int i = 1; i <= N; ++ i)
Dp[i] = 0;
for(int i = 1; i <= N; ++ i)
scanf("%i %i %i", &Box[i].first, &Box[i].second.first, &Box[i].second.second);
sort(Box + 1, Box + N + 1);
for(int i = 1; i <= N; ++ i)
{
Dp[i] = 1 + Query(Box[i].second.first, Box[i].second.second);
Update(Box[i].second.first, Box[i].second.second, Dp[i]);
}
int Ans = 0;
for(int i = 1; i <= N; ++ i) Ans = max(Ans, Dp[i]);
printf("%i\n", Ans);
}
}