Pagini recente » Cod sursa (job #1538623) | Cod sursa (job #594209) | Cod sursa (job #1405523) | Cod sursa (job #1652164) | Cod sursa (job #2360504)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int N = 3505;
int fn[N][N],dp[N],n;
struct box
{
int x,y,z;
} v[N];
bool comp(box a, box b)
{
return a.x<b.x;
}
int query(int y, int z)
{
int Max = 0;
for (int i = y; i>0; i-=i&(-i))
for (int j = z; j>0; j-=j&(-j))
Max = max(Max,fn[i][j]);
return Max;
}
void update(int y, int z, int val)
{
for (int i = y; i<=n; i+=i&(-i))
for (int j = z; j<=n; j+=j&(-j))
fn[i][j] = max(fn[i][j],val);
}
int main()
{
int t;
in >> n >> t;
while (t--)
{
for (int i = 1; i<=n; i++)
for (int j = 1; j<=n; j++)
fn[i][j] = 0;
for (int i = 1; i<=n; i++)
in >> v[i].x >> v[i].y >> v[i].z;
sort(v+1,v+n+1,comp);
for (int i = 1; i<=n; i++)
{
dp[i] = query(v[i].y,v[i].z)+1;
update(v[i].y,v[i].z,dp[i]);
}
int ans = 0;
for (int i = 1; i<=n; i++)
ans = max(ans,dp[i]);
out << ans << "\n";
}
}