Pagini recente » Cod sursa (job #1507135) | Cod sursa (job #947441) | Cod sursa (job #293108) | Cod sursa (job #3123131) | Cod sursa (job #2977622)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
int n, t;
struct ura
{
int x, y, z;
};
ura v[3501];
int aib[3501][3501];
#define lsb(x)(x & (-x))
void update(int x, int y, int val)
{
for(int i = x; i <= n; i += lsb(i))
{
for(int j = y; j <= n; j += lsb(j))
{
aib[i][j] = max(aib[i][j], val);
}
}
}
int compute(int x, int y)
{
int ret = 0;
for(int i = x; i > 0; i -= lsb(i))
{
for(int j = y; j > 0; j -= lsb(i))
{
ret = max(ret, aib[i][j]);
}
}
return ret + 1;
}
void reset(int x, int y)
{
for(int i = x; i <= n; i += lsb(i))
{
for(int j = y; j <= n; j += lsb(j))
{
aib[i][j] = 0;
}
}
}
int cmp(ura a, ura b)
{
return a.z < b.z;
}
signed main()
{
in >> n >> t;
while(t--)
{
for(int i = 1; i <= n; i++)
in >> v[i].x >> v[i].y >> v[i].z;
sort(v + 1, v + n + 1, cmp);
int rasp = 1;
for(int i = 1; i <= n; i++)
{
int maxim = compute(v[i].x - 1, v[i].y - 1);
update(v[i].x, v[i].y, maxim);
rasp = max(rasp, maxim);
}
for(int i = 1; i <= n; i++)
reset(v[i].x, v[i].y);
out << rasp << '\n';
}
return 0;
}