Pagini recente » Cod sursa (job #2735836) | Cod sursa (job #1826816) | Cod sursa (job #1765116) | Cod sursa (job #1924651) | Cod sursa (job #1322207)
#include <iostream>
#include <algorithm>
#include <cstdio>
#define DMAX 3505
using namespace std;
int aib[DMAX][DMAX], n, t;
struct cutie
{
int x, y, z;
bool operator()(const cutie& a, const cutie& b)
{
if(a.x==b.x)
{
if (a.y==b.y)
return a.z<b.z;
else return a.y<b.y;
}
else
return a.x<b.x;
}
};
cutie v[DMAX];
int lsb(int x)
{
return ((x^(x-1))&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(val, aib[i][j]);
}
void set0(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 query(int x, int y)
{
int ans=0;
for(int i=x; i>0; i-=lsb(i))
for(int j=y; j>0; j-=lsb(j))
ans=max(aib[i][j], ans);
return ans;
}
void solve()
{
for(int i=1; i<=n; i++)
scanf("%i %i %i", &v[i].x, &v[i].y, &v[i].z);//cin>>v[i].x>>v[i].y>>v[i].z;
sort(v+1, v+n+1, cutie());
int sol=0;
for(int i=1;i<=n;i++)
{
int a=query(v[i].y, v[i].z)+1;
update(v[i].y, v[i].z,a);
if(a>sol)
sol=a;
}
cout<<sol<<'\n';
for(int i=1;i<=n;i++)
set0(v[i].y, v[i].z);
}
void set_aib()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
aib[i][j]=0;
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%i %i", &n, &t);//cin>>n>>t;
for(int i=1; i<=t; i++)
{
//set_aib();
solve();
}
return 0;
}