Cod sursa(job #847604)

Utilizator monica11Szekely Monica monica11 Data 4 ianuarie 2013 11:56:35
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<fstream>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n,t,i,j,nr,maxim,best[3501],poz,l[3501];
struct lungimi
{
    int x,y,z;
};
lungimi a[3501],aux;
int verif(lungimi a,lungimi b)
{
    if(a.x<b.x||a.y<b.y||a.z<b.z)
    return 1;
    return 0;
}
int verif1(lungimi a, lungimi b)
{
    if(a.x>=b.x||a.y>=b.y||a.z>=b.z)
    return 1;
    return 0;
}
int cauta(lungimi x)
{
    int st,dr,m;
    st=0;
    dr=nr;
    m=(st+dr)/2;
    while(st<=dr)
    {
        if(verif(a[l[m]],x)&&verif1(a[l[m+1]],x))
            return m;
        else
            if(verif(a[l[m]],x))
            {
                st=m+1;
                m=(st+dr)/2;
            }
            else
                {
                    dr=m-1;
                    m=(st+dr)/2;
                }
    }
    return nr;
}
int main()
{
    f>>n>>t;
    while(t--)
    {
        maxim=0;
        for(i=1;i<=n;++i)
        {
            f>>a[i].x>>a[i].y>>a[i].z;
            l[i]=best[i]=0;
        }
        for(i=1;i<=n-1;i++)
        for(j=i+1;j<=n;j++)
        if(a[i].x>a[j].x)
        {
            aux=a[i];
            a[i]=a[j];
            a[j]=aux;
        }
        l[1]=best[1]=nr=1;
        for(i=2;i<=n;++i)
        {
            poz=cauta(a[i]);
            best[i]=poz+1;
            l[poz+1]=i;
            if(poz+1>nr)
                nr=poz+1;
            if(poz+1>maxim)
                maxim=poz+1;
        }
       g<<maxim<<"\n";
    }
    return 0;
}