Pagini recente » Cod sursa (job #3296946) | Cod sursa (job #2801099) | Cod sursa (job #1775767) | Cod sursa (job #2456337) | Cod sursa (job #1505108)
#include <cstdio>
#include <algorithm>
#define DIM 3600
#define x first
#define y second.first
#define z second.second
using namespace std;
int N, T, D[DIM], S[DIM];
pair <int, pair <int, int> > Size[DIM];
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int main ()
{
InputReader fin ("cutii.in" );
freopen ("cutii.out","w", stdout);
fin >> N >> T;
for (int t = 1; t <= T; t ++)
{
for (int i = 1; i <= N; i ++)
{
fin >> Size[i].x;
fin >> Size[i].y;
fin >> Size[i].z;
}
sort (Size + 1, Size + N + 1);
int maxim = 0;
for (int i = 1; i <= N; i ++)
{
D[i] = 1;
for (int j = i - 1; j >= 1; j --)
{
if (D[j] >= D[i] && Size[i].x > Size[j].x && Size[i].y > Size[j].y && Size[i].z > Size[j].z)
D[i] = 1 + D[j];
if (D[j] == S[j] && D[i] == 1 + D[j])
break;
}
maxim = max (maxim, D[i]);
S[i] = max (D[i], S[i-1]);
}
printf ("%d\n", maxim);
}
fclose (stdin );
fclose (stdout);
return 0;
}