Pagini recente » Cod sursa (job #761113) | Cod sursa (job #58536) | Cod sursa (job #250786) | Cod sursa (job #537776) | Cod sursa (job #565379)
Cod sursa(job #565379)
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const char in[]="cutii.in";
const char out[]="cutii.out";
const int Max_N = 3505;
int N, T, aib[Max_N][Max_N];
struct cutie{ int x, y, z; } v[Max_N];
struct cmp{
bool operator()(const cutie &a,const cutie &b)
{
return a.x < b.x;
}
};
inline int maxim(int a, int b){ return a > b ? a : b ; }
void update(int a, int b, int val)
{
for(int i = a ; i <= N ; i += i & -i)
for(int j = b ; j <= N ; j += j & -j)
aib[ i ][ j ] = maxim(aib[ i ][ j ], val);
}
int query(int a, int b)
{int sol = 0;
for(int i = a ; i >= 1 ; i -= i & -i)
for(int j = b ; j >= 1 ; j -= j & -j)
sol = max(sol, aib[i][j]);
return sol;
}
int solve()
{int a, sol = 0;
for(int i =1 ; i <= N ; ++i)
{
a = query(v[i].y, v[i].z) + 1;
update(v[i].y, v[i].z, a);
sol = maxim(sol, a);
}
return sol;
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &T);
while(T--)
{
memset(aib, 0, sizeof(aib));
for(int i = 1 ; i <= N ; ++i)
scanf("%d%d%d", &v[i].x, &v[i].y, &v[i].z);
sort(v + 1 ,v + N + 1 , cmp());
printf("%d\n", solve());
}
return 0;
}