Pagini recente » Borderou de evaluare (job #3150213) | Borderou de evaluare (job #3150757) | Borderou de evaluare (job #1320009) | Borderou de evaluare (job #1279314) | Cod sursa (job #1802412)
#include<cstdio>
#include<algorithm>
using namespace std;
struct aa{int x,y,z;};
aa v[3501];
int aib[3501][3501],n,maxx;
bool sortare(aa a, aa b)
{if(a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.z<b.z))
return 1;
return 0;
}
void query(int x,int y)
{int i,j;
for(i=x;i>=1;i-=(i&(-i)))
for(j=y;j>=1;j-=(j&(-j)))
if(aib[i][j]>maxx)
maxx=aib[i][j];
}
void update(int x,int y)
{int i,j,k;
k=aib[x][y];
for(i=x;i<=n;i+=(i&(-i)))
for(j=y;j<=n;j+=(j&(-j)))
if(aib[i][j]<k)
aib[i][j]=k;
}
void f()
{int i,j,x,k,q,maxtot;
for(i=1;i<=n;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort(v+1,v+n+1,sortare);
maxtot=0;
for(i=1;i<=n;i++)
{maxx=0;
query(v[i].y-1,v[i].z-1);
maxx++;
if(aib[v[i].y][v[i].z]<maxx)
{aib[v[i].y][v[i].z]=maxx;
update(v[i].y,v[i].z);
}
if(maxx>maxtot)
maxtot=maxx;
}
printf("%d\n",maxtot);
for(i=1;i<=n;i++)
{aib[v[i].y][v[i].z]=0;
update(v[i].y,v[i].z);
}
}
int main ()
{freopen ("cutii.in","r",stdin);
freopen ("cutii.out","w",stdout);
int t,i;
scanf("%d%d",&n,&t);
for(i=1;i<=t;i++)
f();
return 0;
}