Pagini recente » Cod sursa (job #2909257) | Cod sursa (job #2330578) | Cod sursa (job #1117984) | Cod sursa (job #519722) | Cod sursa (job #2360508)
#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);
}
void reset(int y, int z)
{
for (int i = y; i<=n; i+=i&(-i))
for (int j = z; j<=n; j+=j&(-j))
fn[i][j] = 0;
}
int main()
{
int t;
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,comp);
int ans = 0;
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]);
ans = max(ans,dp[i]);
}
out << ans << "\n";
for (int i = 1; i<=n; i++)
reset(v[i].y,v[i].z);
}
}