Pagini recente » Cod sursa (job #201698) | Cod sursa (job #2023997) | Cod sursa (job #1617961) | Cod sursa (job #1139712) | Cod sursa (job #1006720)
#include <cstdio>
using namespace std;
struct box {
int x, y, z;
};
int n, t;
box a[3500];
int sol[3500];
void read() {
for(int i = 0; i < n; i++)
scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].z);
}
void swap(box &a, box &b) {
box t = a;
a = b;
b = t;
}
int divide(int l, int r) {
box p = a[l];
while(l < r) {
while(a[l].z < p.z) l++;
while(a[r].z > p.z) r--;
if(l < r) swap(a[l], a[r]);
}
return l;
}
void quicksort(int l, int r) {
int m = divide(l, r);
if(l < m) quicksort(l, m - 1);
if(r > m) quicksort(m + 1, r);
}
int maxsol(int p) {
int m = 0;
for(int i = n - 1; i > p; i--)
if(sol[i] > m && (a[i].x > a[p].x && a[i].y > a[p].y && a[i].z > a[p].z))
m = sol[i];
return m;
}
void solve() {
freopen("cutii.in", "r", stdin);
scanf("%d %d", &n, &t);
freopen("cutii.out", "w", stdout);
while(t > 0) {
read();
quicksort(0, n - 1);
sol[n - 1] = 1;
int m = 1;
for(int i = n - 2; i >= 0; i--) {
sol[i] = maxsol(i) + 1;
if(sol[i] > m) m = sol[i];
}
printf("%d\n", m);
t--;
}
fclose(stdin);
fclose(stdout);
}
int main() {
solve();
return 0;
}