Pagini recente » Cod sursa (job #305735) | Cod sursa (job #128592) | Cod sursa (job #2087099) | Cod sursa (job #180678) | Cod sursa (job #2953873)
#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
FILE *in = fopen("cutii.in", "r"), *out = fopen("cutii.out", "w");
#define MaxN 3505
int N, T, result;
int BIT[MaxN][MaxN];
struct Box {
int dims[3];
} v[MaxN];
int query(int x, int y){
int ML = 0;
for(int i = x; i > 0; i -= i & (-i))
for(int j = y; j > 0; j -= j & (-j))
ML = max(ML, BIT[i][j]);
return ML;
}
void update(int x, int y, int len){
for(int i = x; i <= N; i += i & (-i))
for(int j = y; j <= N; j += j & (-j))
BIT[i][j] = max(len, BIT[i][j]);
}
void reset_BIT(int x, int y){
for(int i = x; i <= N; i += i & (-i))
for(int j = y; j <= N; j += j & (-j)){
BIT[i][j] = 0;
}
}
int main()
{
fscanf(in, "%d %d", &N, &T);
int ML;
while(T--) {
for(int i = 1; i <= N; ++i)
fscanf(in, "%d %d %d", &v[i].dims[0], &v[i].dims[1], &v[i].dims[2]);
sort(v + 1, v + N + 1, [](Box a, Box b) { return a.dims[0] < b.dims[0]; });
result = 1;
for (int i = 1; i <= N; ++i){
ML = query(v[i].dims[1] - 1, v[i].dims[2] - 1);
update(v[i].dims[1], v[i].dims[2], ML + 1);
if (ML + 1 > result)
result = ML + 1;
}
fprintf(out, "%d\n", result);
for (int i = 1; i <= N; ++i){
reset_BIT(v[i].dims[1], v[i].dims[2]);
}
//memset(BIT, 0, sizeof(BIT));
}
return 0;
}