Pagini recente » Cod sursa (job #451855) | Cod sursa (job #24845) | Cod sursa (job #1307376) | Cod sursa (job #2781520) | Cod sursa (job #1670069)
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
class BIT
{
vector<vector<int>> _container;
int idx(int i)
{
return (i ^ (i - 1)) & i;
}
public:
BIT(int n, int m)
{
_container.resize(n + 1);
for (int i = 0; i < _container.size(); i++)
{
_container[i].resize(m + 1);
}
}
void Clear()
{
for (int i = 0; i < _container.size(); i++)
{
fill(_container[i].begin(), _container[i].end(), 0);
}
}
void Update(int a, int b, int value)
{
for (int i = a; i <= _container.size() - 1; i += idx(i))
{
for (int j = b; j <= _container[i].size() - 1; 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, N;
vector<Box> boxes;
//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);
boxes.resize(N + 1);
BIT bit(N, N);
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(boxes.begin(), boxes.end(), 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;
}