Pagini recente » Cod sursa (job #2419861) | Cod sursa (job #859998) | Cod sursa (job #2416526) | Cod sursa (job #1423497) | Cod sursa (job #2800742)
#include <iostream>
#include <algorithm>
#include <cstring>
#define NMAX 3505
using namespace std;
struct elem {
int x, y, z;
} cutii[NMAX];
short tests;
int n, fwt[NMAX][NMAX];
inline int queryFwt(int X, int Y) {
int ANS = 0;
for(int i = X; i > 0; i -= i & -i)
for(int j = Y; j > 0; j -= j & -j)
ANS = max(ANS, fwt[i][j]);
return ANS;
}
inline void updateFwt(int X, int Y, const int VAL) {
for(int i = X; i <= n; i += i & -i)
for(int j = Y; j <= n; j += j & -j)
fwt[i][j] = max(fwt[i][j], VAL);
}
void solve() {
memset(fwt, 0, sizeof(fwt));
for(int i = 1; i <= n; ++i)
scanf("%d%d%d", &cutii[i].x, &cutii[i].y, &cutii[i].z);
sort(cutii + 1, cutii + n + 1, [](const elem X, const elem Y) {
return X.z < Y.z;
});
for(int i = 1; i <= n; ++i) {
const int crt = queryFwt(cutii[i].x, cutii[i].y) + 1;
updateFwt(cutii[i].x, cutii[i].y, crt);
}
printf("%d\n", queryFwt(n, n));
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%d%hd", &n, &tests);
while(tests--) solve();
return 0;
}