Pagini recente » Cod sursa (job #2017335) | Cod sursa (job #2574476) | Cod sursa (job #2013620) | Cod sursa (job #162685) | Cod sursa (job #1331196)
#include<algorithm>
#include<cstdio>
#define m(x) x&(-x)
#define MAX 3500
using namespace std;
struct mazi{int l,L,h;};
int aib[MAX+1][MAX+1];
int n;
mazi v[MAX+1];
void clear(int x,int y){
int i,j;
for(i=x;i<=n;i+=m(i))
for(j=y;j<=n &&aib[i][j]!=0;j+=m(j))
aib[i][j]=0;
}
void update(int x,int y,int ce){
int i,j;
for(i=x;i<=n;i+=m(i))
for(j=y;j<=n &&aib[i][j]<ce;j+=m(j))
aib[i][j]=ce;
}
int query(int x,int y){
int i,j,max=0;
for(i=x;i>0;i-=m(i))
for(j=y;j>0;j-=m(j))
if (aib[i][j]>max) max=aib[i][j];
return max;
}
bool meow(mazi a,mazi b){
if (a.l<b.l) return true;
return false;
}
int main(){
freopen ("cutii.in","r",stdin);
freopen ("cutii.out","w",stdout);
int t,i,j,max,rez;
scanf ("%d%d",&n,&t);
for(j=1;j<=t;j++){
for(i=1;i<=n;i++)
scanf ("%d%d%d",&v[i].l,&v[i].L,&v[i].h);
sort(v+1,v+n+1,meow);
max=0;
for(i=1;i<=n;i++){
rez=query(v[i].L-1,v[i].h-1)+1;
if (max<rez) max=rez;
update(v[i].L,v[i].h,rez);
}
printf ("%d\n",max);
for(i=1;i<=n;i++)
clear(v[i].L,v[i].h);
}
return 0;
}