Cod sursa(job #1144163)

Utilizator MorganMatthew Watsky Morgan Data 16 martie 2014 18:47:20
Problema Cutii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
int n,q,lung[4000],poz[4000];
struct co{ int x,y,z;};
co v[4000];

int ord(co i,co j)
{
    if(i.x==j.x)
        if(i.y==j.y)
            return i.z<j.z;
        else
            return i.y<j.y;
    return i.x<j.x;
}

void afisare()
{
    int i;
    for(i=1;i<=n;i++)
        out<<v[i].x<<' '<<v[i].y<<' '<<v[i].z<<'\n';
    out<<'\n';
}

void citire()
{
    int i;
    for(i=1;i<=n;i++)
        in>>v[i].x>>v[i].y>>v[i].z;
}

int verificare(int i,int j)
{
    if(v[i].x <= v[j].x && v[i].y <= v[j].y && v[i].z <= v[j].z)
        return 1;
    return 0;
}

void raspuns()
{
    int i,j,max=0;
    citire();
    sort(v+1,v+n+1,ord);
    lung[n]=1;
    poz[n-1]=1;
    for(i=n-1;i>=1;i--)
    {
        max=0;
        lung[i]=1;
        for(j=i+1;j<=n;j++)
            if(verificare(i,j))
            {
                if(lung[j]>max)
                    max=lung[j];
                if(max>poz[i])
                    break;
            }
        lung[i]=max+1;
        poz[i-1]=max;
    }
    max=0;
    for(i=1;i<=n;i++)
        if(max<lung[i])
            max=lung[i];
    out<<max;
    out<<'\n';
}

int main ()
{
    int i;
    in>>n>>q;
    for(i=1;i<=q;i++)
        raspuns();
}