Pagini recente » Cod sursa (job #3037464) | Cod sursa (job #966639) | Cod sursa (job #1904028) | Cod sursa (job #2086648) | Cod sursa (job #405532)
Cod sursa(job #405532)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct vect
{
int x,y,z;
};
int n,t,aib[3505][3505];
vect v[3505];
int cmp(vect a, vect b)
{
return a.z<b.z;
}
inline int lsb(int x){return x&-x;}
void update(int x, int y, int z)
{
int i,j;
for(i=x;i<=n;i+=lsb(i))
for(j=y;j<=n;j+=lsb(j))
if(aib[i][j]<z)
aib[i][j]=z;
}
int query(int x, int y)
{
int i,j,ret=0;
for(i=x;i;i-=lsb(i))
for(j=y;j;j-=lsb(j))
if(aib[i][j]>ret)
ret=aib[i][j];
return ret;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
int i,x,sol;
while(t--)
{
memset(aib,0,sizeof(aib));
sol=0;
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,cmp);
for(i=1;i<=n;i++)
{
x=query(v[i].x-1,v[i].y-1)+1;
if(x>sol)
sol=x;
update(v[i].x,v[i].y,x);
}
printf("%d\n",sol);
}
return 0;
}