Pagini recente » Cod sursa (job #1117659) | Cod sursa (job #979508) | Cod sursa (job #1624520) | Cod sursa (job #416421) | Cod sursa (job #483413)
Cod sursa(job #483413)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
struct cutie{
int x;
int y;
int z;
};
cutie V[3505];
int L,N,P[3505];
struct cmp{
public :
inline bool operator()(const cutie&a,const cutie&b){return a.z<b.z;}
};
inline bool mare(const cutie &a,const cutie &b)
{
if(a.x>b.x&&a.y>b.y&&a.z>b.z)return 1;
return 0;
}
int search(cutie key)
{
int i,step=1;
while((step<<1)<=L)step<<=1;
for(i=0;step;step>>=1)
if(i+step<=L&&mare(key,V[P[i+step]]))
i+=step;
return i;
}
int main()
{
int T,i,l,j;
in>>N>>T;
while(T--)
{
for(i=0;i<=N+1;++i)P[i]=0;
for(i=1;i<=N;i++)
in>>V[i].x>>V[i].y>>V[i].z;
sort(V+1,V+N+1,cmp());
P[1]=1,L=1;
/*for(i=2;i<=N;i++)
{
l = search(V[i]);
if(P[l+1]==0)P[l+1]=i,L++;
else if(mare(V[P[l+1]],V[i]))
P[l+1]=i;
}*/
P[1] = 1 ;
for(i=2;i<=N;i++)
{
for(j=i-1;j;j--)
if(mare(V[i],V[j])&&P[i]<P[j]+1)
P[i]=P[j]+1;
if(P[i]>L)
L=P[i];
}
out<<L<<'\n';
}
return 0;
}