Pagini recente » Cod sursa (job #2714047) | Cod sursa (job #1495323) | Cod sursa (job #1411329) | Cod sursa (job #1056121) | Cod sursa (job #1427432)
#include <cstdio>
#include <algorithm>
#define ub(x) (x&(-x))
using namespace std;
struct awesome
{
int x,y,z;
};
int n,t,i,j,val,AIB[3505][3505],p1,p2;
awesome v[3505];
inline bool cmp(awesome a,awesome b)
{
if(a.x<b.x) return true;
if(a.x==b.x && a.y<b.y) return true;
if(a.x==b.x && a.y==b.y && a.z<b.z) return true;
return false;
}
inline void upd(int xx,int yy,int val)
{
int i,j;
for(i=xx; i<=n; i+=ub(i))
for(j=yy; j<=n; j+=ub(j))
AIB[i][j]=max(AIB[i][j],val);
}
inline int query(int xx,int yy)
{
int i,j,nr=0;
for(i=xx;i>0;i-=ub(i))
for(j=yy;j>0;j-=ub(j))
nr=max(nr,AIB[i][j]);
return nr;
}
inline void cl(int xx,int yy)
{
int i,j;
for(i=xx; i<=n; i+=ub(i))
for(j=yy; j<=n; j+=ub(j))
AIB[i][j]=0;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d %d\n",&n,&t);
for(i=1; i<=t; ++i)
{
for(j=1; j<=n; ++j)
scanf("%d %d %d\n",&v[j].x,&v[j].y,&v[j].z);
sort(v+1,v+n+1,cmp);
for(j=1; j<=n; ++j)
{
p1=v[j].y;
p2=v[j].z;
val=query(p1-1,p2-1)+1;
upd(p1,p2,val);
}
printf("%d\n",query(p1,p2));
for(j=1;j<=n;++j)
cl(v[j].y,v[j].z);
}
return 0;
}