Pagini recente » Cod sursa (job #2632771) | Cod sursa (job #2203089) | Cod sursa (job #1914964) | Cod sursa (job #2255396) | Cod sursa (job #806193)
Cod sursa(job #806193)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MX 3505
#define MY 3505
using std::sort;
using std::max;
int t[MX][MY];
struct str
{
int x,y,z;
str()
{
x=y=z=0;
}
str (int xx,int yy,int zz)
{
x=xx;
y=yy;
z=zz;
}
bool operator<(const str s)const
{
if(x<s.x)
return true;
if(x>s.x)
return false;
if(y<s.y)
return true;
if(y>s.y)
return false;
return z<s.z;
}
}v[3505];
void u (int i,int j,int v)
{
int sj=j;
while(i<MX){
while(j<MY){
t[i][j]=max (t[i][j],v);
j+=(j&-j);
}
j=sj;
i+=(i&-i);
}
}
int g (int i,int j)
{
int s=0,sj=j;
while(i){
while(j){
s=max (s,t[i][j]);
j-=(j&-j);
}
j=sj;
i-=(i&-i);
}
return s;
}
int main()
{
freopen ("cutii.in","r",stdin);
freopen ("cutii.out","w",stdout);
int n,teste;
scanf ("%d%d",&n,&teste);
while(teste--){
memset (t,0,sizeof(t));
memset (v,0,sizeof(v));
for(int i=0;i<n;i++){
int x,y,z;
scanf ("%d%d%d",&x,&y,&z);
v[i]=str (x,y,z);
}
sort (v,v+n);
int r=0;
for(int i=0;i<n;i++){
int cr=g (v[i].y,v[i].z)+1;
u (v[i].y,v[i].z,cr);
if(cr>r)
r=cr;
}
printf ("%d\n",r);
}
return 0;
}