Pagini recente » Cod sursa (job #154949) | Cod sursa (job #1357024) | Cod sursa (job #1051792) | Cod sursa (job #1103691) | Cod sursa (job #1522239)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define ub(x) (x&(-x))
#define x first
#define y second.x
#define z second.second
using namespace std;
const int NMAX = 3500+10;
pair < int,pair<int , int> > v[NMAX];
int aib[NMAX][NMAX],n,T;
inline void edd(int xX , int yY)
{
for (int i = xX ; i <= n; i+=ub(i))
for (int j = yY; j <= n ; j+=ub(j))
aib[i][j]=max(aib[i][j],aib[xX][yY]);
return ;
}
inline int query(int xX , int yY)
{
int res=0;
for (int i = xX - 1 ; i ; i-=ub(i))
for (int j = yY-1 ; j ; j-=ub(j))
res=max(aib[i][j],res);
return res;
}
inline void dilit(int xX , int yY)
{
for (int i = xX ; i <= n; i+=ub(i))
for (int j = yY; j <= n ; j+=ub(j))
aib[i][j]=0;
return ;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d %d\n",&n,&T);
for ( ; T ; --T)
{
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);
int result = 0;
for (int i = 1; i<=n ; ++i)
{
int s = 1 + query(v[i].y,v[i].z);
result=max(result,s);
aib[v[i].y][v[i].z]=s;
edd(v[i].y,v[i].z);
}
printf("%d\n",result);
for (int i = 1 ; i <= n ; ++i)
dilit(v[i].y,v[i].z);
}
return 0;
}