Pagini recente » Cod sursa (job #1261385) | Cod sursa (job #2886139) | Cod sursa (job #959520) | Cod sursa (job #1168168) | Cod sursa (job #222409)
Cod sursa(job #222409)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MAXN 350
using namespace std;
struct cutie {
short int x, y, z;
};
short int n, t, i, j, aib[MAXN][MAXN], rez;
cutie v[MAXN];
bool cmp(cutie a, cutie b) {
if (a.z < b.z)
return true;
else
return false;
}
void read() {
short int i;
memset(v, 0, sizeof(v));
memset(aib, 0, sizeof(aib));
rez = 0;
for (i = 1; i <= n; i++)
scanf("%hd%hd%hd", &v[i].x, &v[i].y, &v[i].z);
sort(v + 1, v + n + 1, cmp);
}
inline short int lsb(short int x) {
return ((x & (x - 1) ) ^ x);
}
short int query(short int x, short int y) {
short int smax = 0, i, j;
for (i = x; i > 0 ; i -= lsb(i))
for (j = y; j > 0; j -= lsb(j))
if (aib[i][j] > smax)
smax = aib[i][j];
return smax;
}
void update(short int x, short int y, short int up) {
short int i, j;
for (i = x; i <= n; i += lsb(i))
for (j = y; j <= n; j += lsb(j))
if (up > aib[i][j])
aib[i][j] = up;
}
void solve() {
short int i, mx;
for (i = 1; i <= n; i++) {
mx = query(v[i].x - 1, v[i].y - 1) + 1;
if (mx > rez)
rez = mx;
update(v[i].x, v[i].y, mx);
// fprintf(stderr, "%d\n", mx);
}
}
int main() {
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%hd%hd", &n, &t);
// fprintf(stderr, "%d\n", n);
for (i = 1; i <= t; i++) {
read();
solve();
// fprintf(stderr, "%d\n", n);
printf("%hd\n", rez);
}
return 0;
}