Pagini recente » Cod sursa (job #2458664) | Cod sursa (job #2279997) | Cod sursa (job #1766487) | Cod sursa (job #1628098) | Cod sursa (job #1094554)
#include <cstdio>
#include <cstring>
#include <algorithm>
int n,t;
const int Q=3500;
struct cutie{
int x,y,z;
} v[Q+1];
bool scm(cutie a, cutie b)
{
return a.x < b.x;
}
int arb[Q+1][Q+1];//,bigz[Q+1],bigy[Q+1];
int viz[Q+1][Q+1],act;
int ask(int i, int j)
{
int rez=0;
int j0=j;
while(i)
{
while(j)
{
if(arb[i][j]>rez && viz[i][j]==act)
{
rez=arb[i][j];
}
j-=j&(-j);
}
i-=i&(-i);
j=j0;
}
return rez+1;
}
void update(int i, int j, int val)
{
int j0=j;
while(i<=n)
{
while(j<=n)
{
if(arb[i][j]<val || viz[i][j]!=act)
{
arb[i][j]=val;
viz[i][j]=act;
}
j+=j&(-j);
}
j=j0;
i+=i&(-i);
}
}
void solve()
{
for(int i=1; i<=n; i++)
{
scanf("%d%d%d",&v[i].x, &v[i].y, &v[i].z);
}
std:: sort(v+1,v+n+1,scm);
for(int i=1; i<=n; i++)
memset(arb[i],0, sizeof arb[i]);
int val,max=0;
for(int i=1; i<=n; i++)
{
val=ask(v[i].y-1,v[i].z-1);
if(val>max)
max=val;
update(v[i].y,v[i].z,val);
}
printf("%d\n",max);
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
for(act=1; act<=t; act++)
{
solve();
}
return 0;
}