Pagini recente » Cod sursa (job #1771676) | Cod sursa (job #2515090) | Cod sursa (job #680540) | Cod sursa (job #1289372) | Cod sursa (job #1733339)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,aib[3510][3510];
struct punct
{
int x,y,z;
bool operator <(const punct &aux) const
{
return z<aux.z;
}
};
punct v[3510];
void aib_update(int a,int b,int val)
{
for(int i=a;i<=n;i+=i&(-i))
for(int j=b;j<=n;j+=j&(-j))
aib[i][j]=max(aib[i][j],val);
}
int aib_query(int a,int b)
{
int s=0;
for(int i=a;i>0;i-=i&(-i))
for(int j=b;j>0;j-=j&(-j))
s=max(s,aib[i][j]);
return s;
}
void aib_delete(int a,int b)
{
for(int i=a;i<=n;i+=i&(-i))
for(int j=b;j<=n;j+=j&(-j))
aib[i][j]=0;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
int t,r,s;
scanf("%d%d",&n,&t);
for(int test=1;test<=t;test++)
{
r=0;s=0;
for(int i=1;i<=n;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort(v+1,v+n+1);
for(int i=1;i<=n;i++)
{
s=aib_query(v[i].x-1,v[i].y-1)+1;
r=max(r,s);
aib_update(v[i].x,v[i].y,s);
}
printf("%d\n",r);
for(int i=1;i<=n;i++)
aib_delete(v[i].x,v[i].y);
}
return 0;
}