Pagini recente » Cod sursa (job #862502) | Cod sursa (job #1174815) | Cod sursa (job #811274) | Cod sursa (job #794484) | Cod sursa (job #2452431)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct cut
{
int x, y, z;
} cutii[3505];
int n, t, dp[3505], mat[3505][3505], rez;
bool operator<(cut a, cut b)
{
return a.x<b.x;
}
int query(int y, int z)
{
int ans=0;
for (int i=y; i>0; i-=(i&(-i)))
for (int j=z; j>0; j-=(j&(-j)))
ans=max(ans,mat[i][j]);
return ans;
}
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)))
{
mat[i][j]=max(mat[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)))
mat[i][j]=0;
}
int main()
{
ifstream cin("cutii.in");
ofstream cout("cutii.out");
cin >> n >> t;
for (int test=1; test<=t; ++test)
{
for (int i=1; i<=n; ++i)
cin >>cutii[i].x>>cutii[i].y>>cutii[i].z;
rez=0;
sort(cutii+1,cutii+n+1);
for (int i=1; i<=n; ++i)
{
dp[i]=query(cutii[i].y, cutii[i].z)+1;
update(cutii[i].y,cutii[i].z,dp[i]);
rez=max(rez,dp[i]);
}
cout<< rez << '\n';
for (int i=1; i<=n; ++i)
reset(cutii[i].y,cutii[i].z);
}
return 0;
}