Pagini recente » Cod sursa (job #2632457) | Istoria paginii utilizator/akasoare | Cod sursa (job #153312) | Cod sursa (job #1773372) | Cod sursa (job #1197579)
#include<stdio.h>
#include<algorithm>
#define maxn 3505
using namespace std;
struct box{int x,y,z;} a[maxn];
int T,n,sol;
int best[maxn],aib[maxn][maxn];
bool cmp(const box &a,const box &b){
return a.x<b.x;
}
void change(int &x,int val,int ok){
if(ok) x=max(x,val);
else x=0;
}
void update(int x,int y,int val,int ok)
{
int yc;
for(;x<=n;x+=x&(-x))
for(yc=y;yc<=n;yc+=yc&(-yc))
change(aib[x][yc],val,ok);
}
int query(int x,int y)
{
int Max=0,yc;
for(;x;x-=x&(-x))
for(yc=y;yc;yc-=yc&(-yc))
Max=max(Max,aib[x][yc]);
return Max;
}
void solve()
{
sort(a+1,a+n+1,cmp);
sol=0;
for(int i=1;i<=n;i++)
{
best[i]=query(a[i].y,a[i].z)+1;
sol=max(sol,best[i]);
update(a[i].y,a[i].z,best[i],1);
}
for(int i=1;i<=n;i++) update(a[i].y,a[i].z,0,0);
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&T);
for(int it=1;it<=T;it++)
{
for(int i=1;i<=n;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
solve();
printf("%d\n",sol);
}
fclose(stdin);
fclose(stdout);
return 0;
}