Pagini recente » Cod sursa (job #1502109) | Autentificare | Cod sursa (job #2634839) | Cod sursa (job #111663) | Cod sursa (job #1670051)
#include <fstream>
#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");
f >> N >> T;
BIT bit;
for (; T > 0; T--)
{
bit.Clear();
for (i = 1; i <= N; i++)
{
f >> a >> b >> c;
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);
}
g << bit.Query(N, N) << "\n";
}
f.close();
g.close();
return 0;
}