Pagini recente » Cod sursa (job #2270994) | Cod sursa (job #2462078) | Cod sursa (job #446233) | Cod sursa (job #145920) | Cod sursa (job #2115405)
#include <bits/stdc++.h>
#define INF 2140000000
#define MOD 1000000007
#define MaxN 3505
#define lsb(i) (x&(-x))
using namespace std;
FILE*IN=fopen("cutii.in","r"),*OUT=fopen("cutii.out","w");
int T,N,aib[MaxN][MaxN],d[MaxN];
struct box
{
int x,y,z;
}v[MaxN];
bool cond(box a,box b)
{
return a.x<b.x;
}
inline void Update(int x,int y,int val)
{
for(int i=x;i<=N;i+=lsb(i))
for(int j=y;j<=N;j+=lsb(j))
aib[i][j]=max(aib[i][j],val);
}
inline void Clear(int x,int y)
{
for(int i=x;i<=N;i+=lsb(i))
for(int j=y;j<=N;j+=lsb(j))
aib[i][j]=0;
}
inline int Query(int x,int y)
{
int ans=0;
for(int i=x;i>0;i-=lsb(i))
for(int j=y;j>0;j-=lsb(j))
ans=max(aib[i][j],ans);
return ans;
}
int main()
{
fscanf(IN,"%d%d",&N,&T);
for(int t=1;t<=T;t++)
{
for(int i=1;i<=N;i++)
fscanf(IN,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort(v+1,v+1+N,cond);
int Max=0;
for(int i=1;i<=N;i++)
{
int Val=Query(v[i].y,v[i].z)+1;
Update(v[i].y,v[i].z,Val);
Max=max(Max,Val);
}
for(int i=1;i<=N;i++)
Clear(v[i].y,v[i].z);
fprintf(OUT,"%d\n",Max);
}
return 0;
}