Pagini recente » Cod sursa (job #2816765) | Cod sursa (job #391367) | Cod sursa (job #626860) | Cod sursa (job #1729778) | Cod sursa (job #1409562)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int max2(int a,int b){
if(a>b)
return a;
return b;
}
const int N=3500;
class Box{
public:
int x,y,z;
Box(){
}
Box(int xx,int yy,int zz){
x=xx;
y=yy;
z=zz;
}
bool operator<(const Box&b)const{
return x<b.x;
}
};
int aib[N+1][N+1];
Box v[N+1];
int n,t;
int d[N+1];
int query(int x,int y){
int r=0;
int cy=y;
while(x){
y=cy;
while(y){
if(d[aib[x][y]]>d[r])
r=aib[x][y];
y-=y&(-y);
}
x-=x&(-x);
}
return r;
}
void update(int x,int y,int val){
int cy=y;
while(x<=n){
y=cy;
while(y<=n){
if(d[aib[x][y]]<d[val])
aib[x][y]=val;
y+=y&(-y);
}
x+=x&(-x);
}
}
int main(){
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
while(t--){
for(int i=1;i<=n;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
memset(aib,0,sizeof(aib));
memset(d,0,sizeof(d));
sort(v+1,v+n+1);
int res=0;
for(int i=1;i<=n;i++){
d[i]=d[query(v[i].y,v[i].z)]+1;
res=max2(res,d[i]);
update(v[i].y,v[i].z,i);
}
printf("%d\n",res);
}
return 0;
}