Pagini recente » Cod sursa (job #437486) | Cod sursa (job #2832455) | Cod sursa (job #950256) | Cod sursa (job #1428286) | Cod sursa (job #227185)
Cod sursa(job #227185)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define MAXN 3500
long test, n, t, i, j, k, sol, x, cut[3][MAXN], v[MAXN], aib[MAXN][MAXN];
bool cmp(long x, long y) {
return cut[2][x] < cut[2][y];
}
long LSB(long num);
long query(long x, long y);
void update(long x, long y, long k);
int main() {
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%ld %ld", &n, &t);
for (test = 1; test <= t; ++test) {
sol = 0;
for (i = 1; i <= n; v[i] = i, ++i) {
scanf("%ld %ld %ld", &cut[0][i], &cut[1][i], &cut[2][i]);
}
for (i = 0; i <= n; ++i) {
for (j = 0; j <= n; ++j) {
aib[i][j] = 0;
}
}
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; ++i) {
x = query(cut[0][v[i]] - 1, cut[1][v[i]] - 1) + 1;
if (x > sol) {
sol = x;
}
update(cut[0][v[i]], cut[1][v[i]], x);
}
printf("%ld\n", sol);
}
return 0;
}
long LSB(long num) {
return num ^ (num & (num - 1));
}
long query(long x, long y) {
long ret = 0;
for (long i = x; i > 0; i -= LSB(i)) {
for (long j = y; j > 0; j -= LSB(j)) {
if (ret < aib[i][j]) {
ret = aib[i][j];
}
}
}
return ret;
}
void update(long x, long y, long k) {
for (long i = x; i <= n; i += LSB(i)) {
for (long j = y; j <= n; j += LSB(j)) {
if (aib[i][j] < k) {
aib[i][j] = k;
}
}
}
}