Cod sursa(job #1171485)

Utilizator lucian666Vasilut Lucian lucian666 Data 15 aprilie 2014 19:56:46
Problema Cutii Scor 10
Compilator cpp Status done
Runda ubb_acm_etapa_individuala1 Marime 1.56 kb


//code by Vasilut
#include<fstream>
#include<algorithm>
#include<vector>

#define NN 3550

using namespace std;
ofstream out("cutii.out");


int n , m , L[NN] , l[NN] , h[NN] , v[NN];

void quick(long int li, long int ls)
{

 long int i , j , x , y;

 i=li;
 j=ls;
 x=v[(li+ls)/2];


 while (i<=j)
      {

       while (v[i]>x) i++;
       while (v[j]<x) j--;

       if (i<=j)
  {

   y=v[i];
   v[i]=v[j];
   v[j]=y;

   y=l[i];
   l[i]=l[j];
   l[j]=y;


   y=L[i];
   L[i]=L[j];
   L[j]=y;


   y=h[i];
   h[i]=h[j];
   h[j]=y;


   i++;
   j--;

  }
    }

 if (i<ls)
    quick(i,ls);

 if (j>li)
    quick(li,j);
}

int intra(long int i , long int j )
{

    long int gasit = 1;
    if ( l[i] > l[j] && L[i] > L[j] && h[i] > h[j] )
        gasit = 0;

    return gasit;
}

int main()
{

    ifstream in("cutii.in");
    long int n , m;

    in >> n >> m;
    for(int i=1 ; i<=m ; i++)
    {

        for(int j=1 ; j<=n ; j++  )
            in >> l[j] >> L[j] >> h[j];

        for(int j=1;  j<=n ; j++)
            v[j] = l[j] * L[j] * h[j];

        quick(1,n);


        for (int j=1;j<=n+2;j++)
            v[j]=0;
    v[n]=1;

    long int maxx=0;

 for (int j=n-1 ; j>=1 ; j-- )
    {

     maxx=0;

     for (int k =j+1;k<=n;k++)

  if (v[k]>=maxx && intra(j,k)==0 )
   {

    maxx=v[k];
    break;

   }

     v[j]=maxx+1;

    }

 maxx=0;
 for (int j=1 ; j<=n ; j++)
    if (maxx<=v[j])
      maxx=v[j];

    out <<maxx << '\n';

    }

    return 0;
}