Pagini recente » Cod sursa (job #2940701) | Cod sursa (job #2629332) | Cod sursa (job #2629690) | Cod sursa (job #89004) | Cod sursa (job #1670062)
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
int _container[3501][3501], N;
class BIT
{
int idx(int i)
{
return (i ^ (i - 1)) & i;
}
public:
BIT()
{
}
void Clear()
{
memset(_container, 0, sizeof(_container));
}
void Update(int a, int b, int value)
{
for (int i = a; i <= N; i+=idx(i))
{
for (int j = b; j <= N; j += idx(j))
{
_container[i][j] = max(_container[i][j], value);
}
}
}
int Query(int a, int b)
{
int result = 0;
for (int i = a; i > 0; i -= idx(i))
{
for (int j = b; j > 0; j -= idx(j))
{
if (_container[i][j] > result)
{
result = _container[i][j];
}
}
}
return result;
}
};
class Box
{
public:
int x, y, z;
Box(){ }
Box(int a, int b, int c)
{
x = a;
y = b;
z = c;
}
};
bool cmp(const Box& b1, const Box& b2)
{
return b1.x < b2.x;
}
int main()
{
int T, i, j, a, b, c;
Box boxes[3501];
//ifstream f("cutii.in");
//ofstream g("cutii.out");
FILE *f = fopen("cutii.in", "r");
FILE *g = fopen("cutii.out", "w");
fscanf(f, "%d%d", &N, &T);
BIT bit;
for (; T > 0; T--)
{
bit.Clear();
for (i = 1; i <= N; i++)
{
//f >> a >> b >> c;
fscanf(f, "%d%d%d", &boxes[i].x, &boxes[i].y, &boxes[i].z);
//boxes[i].x = a;
//boxes[i].y = b;
//boxes[i].z = c;
}
sort(begin(boxes) + 1, begin(boxes) + N + 1, cmp);
for (j = 1; j <= N; j++)
{
int tmp = bit.Query(boxes[j].y, boxes[j].z) + 1;
bit.Update(boxes[j].y, boxes[j].z, tmp);
}
fprintf(g, "%d\n", bit.Query(N, N));
}
return 0;
}