Pagini recente » Cod sursa (job #1696378) | Cod sursa (job #1035201) | Cod sursa (job #2417184) | Cod sursa (job #1013892) | Cod sursa (job #2843794)
#include <fstream>
#include <vector>
#include <algorithm>
#define zeros(x) (x & (-x))
///https://www.infoarena.ro/aib
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
int n, t, x, y, z;
int aib[3505][3505]; /// arbore indexat binar
struct cutie
{
int x, y, z;
};
bool cmp(cutie c1, cutie c2)
{
return c1.z < c2.z;
}
vector<cutie> cutii;
void update(int x, int y, int val)
{
for (int i = x; i <= n; i += zeros(i))
for (int j = y; j <= n; j += zeros(j))
aib[i][j] = max(val, aib[i][j]);
}
int query(int x, int y)
{
int sum = 0;
for (int i = x; i > 0; i -= zeros(i))
for (int j = y; j > 0; j -= zeros(j))
sum = max(sum, aib[i][j]);
return sum;
}
void clear(int x, int y)
{
for (int i = x; i <= n; i += zeros(i))
for (int j = y; j <= n; j += zeros(j))
aib[i][j] = 0;
}
void Solve()
{
cutii.clear();
for (int i = 1; i <= n; ++i)
{
cin >> x >> y >> z;
cutii.push_back({ x, y, z });
}
sort(cutii.begin(), cutii.end(), cmp);
int best;
for (auto it : cutii)
{
best = query(it.x, it.y) + 1;
update(it.x, it.y, best);
}
cout << query(n, n) << '\n';
for (auto it : cutii)
clear(it.x, it.y);
}
void Read()
{
cin >> n >> t;
}
int main()
{
Read();
for (int i = 1; i <= t; ++i)
Solve();
return 0;
}