Pagini recente » Cod sursa (job #2042809) | Cod sursa (job #7631) | Cod sursa (job #1401883) | Cod sursa (job #1336760) | Cod sursa (job #1996754)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
short dim[3500][3];
short XD[3500];
void merge(int l,int r,int m)
{
short n1=m-l+1,n2=r-m,i,j=0,k=l;
short L[n1][3],R[n2][3];
for(i=0;i<n1;i++)
{
L[i][0]=dim[l+i][0];
L[i][1]=dim[l+i][1];
L[i][2]=dim[l+i][2];
}
for(i=0;i<n2;i++)
{
R[i][0]=dim[m+i+1][0];
R[i][1]=dim[m+i+1][1];
R[i][2]=dim[m+i+1][2];
}
i=0;
while(i<n1&&j<n2)
{
if(L[i][0]<R[j][0])
{
dim[k][0]=L[i][0];
dim[k][1]=L[i][1];
dim[k][2]=L[i][2];
i++;
}
else
{
dim[k][0]=R[j][0];
dim[k][1]=R[j][1];
dim[k][2]=R[j][2];
j++;
}
k++;
}
while(i<n1)
{
dim[k][0]=L[i][0];
dim[k][1]=L[i][1];
dim[k][2]=L[i][2];
i++;
k++;
}
while(j<n2)
{
dim[k][0]=R[j][0];
dim[k][1]=R[j][1];
dim[k][2]=R[j][2];
j++;
k++;
}
}
void mergesort(int l,int r)
{
if(r>l)
{
int m=(l+r)/2;
mergesort(l,m);
mergesort(m+1,r);
merge(l,r,m);
}
}
int main()
{
short n,t,i,j,ii,m,s,idk;
in>>n>>t;
for(ii=0;ii<t;ii++)
{
for(i=0;i<n;i++)
{
in>>dim[i][0]>>dim[i][1]>>dim[i][2];
}
mergesort(0,n-1);
m=0;
for(j=0;j<n;j++)
{
s=0;
while(i>=0&&dim[i][0]==dim[j][0])i--;
for(i=j-1;i>=0;i--)
if(XD[i]>s&&dim[i][1]<dim[j][1]&&dim[i][2]<dim[j][2])
s=XD[i];
XD[j]=s+1;
if(XD[j]>m)
m=XD[j];
}
out<<m<<"\n";
}
return 0;
}