Pagini recente » Cod sursa (job #2626000) | Borderou de evaluare (job #524871) | Cod sursa (job #2111124) | Cod sursa (job #541393) | Cod sursa (job #2333199)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
struct Box
{
int x, y, z;
};
bool cmp(Box a, Box b)
{
return a.x < b.x;
}
const int DIM = 3507;
Box v[DIM];
int best[DIM];
int aib[DIM][DIM];
int n;
void update(int y, int z, int val)
{
int i, j;
for(i = y; i <= n; i += (i & -i))
for(j = z; j <= n; j += (j & -j))
aib[i][j] = max(aib[i][j], val);
}
int query(int y, int z)
{
int mx = 0;
int i, j;
for(i = y; i > 0; i -= (i & -i))
for(j = z; j > 0; j -= (j & -j))
mx = max(mx, aib[i][j]);
return mx;
}
void reset(int y, int z)
{
int i, j;
for(i = y; i <= n; i += (i & (-i)))
for(j = z; j <= n; j += (j & -j))
aib[i][j] = 0;
}
int t;
int mx;
int main()
{
in >> n >> t;
while(t--)
{
int i;
for(i = 1; i <= n; i++)
in >> v[i].x >> v[i].y >> v[i].z;
sort(v + 1, v + 1 + n, cmp);
mx = 0;
for(i = 1; i <= n; i++)
{
best[i] = query(v[i].y, v[i].z) + 1;
mx = max(mx, best[i]);
update(v[i].y, v[i].z, best[i]);
}
out << mx << '\n';
for(int i = 1; i <= n; i++)
reset(v[i].y, v[i].z);
}
}