Pagini recente » Monitorul de evaluare | Diferente pentru utilizator/sunt_3l3v intre reviziile 10 si 18 | image | Monitorul de evaluare | Cod sursa (job #853669)
Cod sursa(job #853669)
#include<fstream>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
#define cmax 350000
int n,t,m,maxim,lun[cmax+1];
struct punct
{
int x;
int y;
int z;
};
punct p[cmax+1],w[cmax+1];
void interc (int l, int m, int r)
{
int k=l-1;
int i=l;
int j=m+1;
while(i<=m && j<=r)
{
if(p[i].x<p[j].x && p[i].y<p[j].y && p[i].z<p[j].z)
{
k++;
w[k]=p[i];
i++;
}
else
{
k++;
w[k]=p[j];
j++;
}
}
while(i<=m)
{
k++;
w[k]=p[i];
i++;
}
while(j<=r)
{
k++;
w[k]=p[j];
j++;
}
for(i=l;i<=r;i++)
p[i]=w[i];
}
void MergeSort (int l, int r)
{
if(l==r)
return;
int mij=(l+r)/2;
MergeSort (l,mij);
MergeSort (mij+1,r);
interc (l,mij,r);
}
void lm (int y, int x)
{
int i,j;
lun[y]=1;
maxim=1;
for(i=y+1;i<=x;i++)
{
m=0;
for(j=y;j<=i-1;j++)
{
if(p[j].x<p[i].x && p[j].y<p[i].y && p[j].z<p[i].z)
if(lun[j]>m)
m=lun[j];
}
lun[i]=m+1;
if(lun[i]>=maxim)
maxim=lun[i];
}
}
int main ()
{
int i;
f>>n;
f>>t;
for(i=1;i<=n*t;i++)
{
f>>p[i].x;
f>>p[i].y;
f>>p[i].z;
if(i%n==0)
MergeSort(i-n+1,i);
}
maxim=0;
m=1;
for(i=n;i<=n*t;i=2*i)
{
lm(i-n+1,i);
g<<maxim<<"\n";
}
f.close();g.close();
return 0;
}