Pagini recente » Cod sursa (job #219169) | Cod sursa (job #846037) | Cod sursa (job #2869407) | Cod sursa (job #923287) | Cod sursa (job #2644274)
#include <bits/stdc++.h>
#define st first
#define nd second
#define N 3501
using namespace std;
FILE *fin=fopen("cutii.in","r");
FILE *fout=fopen("cutii.out","w");
struct chestie
{
int x, y, z;
}v[N];
int n, m, i, j, ans, dp[N], t, best[N], k;
bool comp(chestie a, chestie b)
{
if(a.x!=b.x)
return a.x>b.x;
if(a.y!=b.y)
return a.y>b.y;
return a.z>b.z;
}
bool ok(int m, chestie x)
{
m=best[m];
return v[m].x>x.x&&v[m].y>x.y&&v[m].z>x.z;
}
int cautbin(int l, int r, chestie x)
{
while(l<r)
{
int m=(l+r+1)/2;
if(ok(m,x))
l=m;
else r=m-1;
}
return l;
}
int main()
{
fscanf(fin,"%d%d",&n,&t);
while(t--)
{
for(i=1;i<=n;++i)
{
dp[i]=1;
fscanf(fin,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
}
sort(v+1,v+n+1,comp);
k=0;
ans=0;
for(i=1;i<=n;++i)
{
int p=cautbin(0,k,v[i]);
if(k<=p||!ok(p,v[i]))
{
best[++k]=i;
}
ans=max(ans,p+1);
if(v[i].x>v[best[p+1]].x&&v[i].y>v[best[p+1]].y&&v[i].z>v[best[p+1]].z)
best[p+1]=i;
}
fprintf(fout,"%d\n",ans);
}
return 0;
}