Cod sursa(job #2414140)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 24 aprilie 2019 11:06:11
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>
#define maxn 3500
//#define aaa system("pause");

using namespace std;

struct dim
{
  int d[3];
};

vector<int> cap[maxn+5]; /// cap[i] contine indicele capetelor subsirurilor de lungime i
dim v[maxn+5];

bool diff ( int i, int j ) /// 1 pt i in j
{
  int a = 0;
  while ( a < 3 && v[i].d[a] < v[j].d[a] ) a++;
  return a == 3;
}

int main ()
{
  ifstream fin ("cutii.in");
  ofstream fout ("cutii.out");

  int n, t; fin >> n >> t;
  int i, j, z, pas, m = 1, sz;
  while (t--)
  {
    for ( i = 1; i <= n; i++ ) fin >> v[i].d[0] >> v[i].d[1] >> v[i].d[2];
    cap[1].push_back (1);
    for ( m = 1, i = 2; i <= n; i++ )
    {
      for ( pas = (1<<30), j = 0; pas > 0; pas /= 2 )
        if ( j + pas <= m )
        {
          z = 0; sz = cap[j+pas].size();
          while ( z < sz && diff(cap[j+pas][z], i) == 0 ) z++;
          if ( z < sz ) j += pas;
        }

      cap[j+1].push_back (i);
      z = 0; sz = cap[1].size();
      while ( z < sz && diff(i,cap[1][z]) == 0 ) z++;
      if ( z < sz ) cap[1].push_back (i);
      if ( m == j ) m++;
    }

    fout << m << '\n';
    for ( i = 0; i <= m; i++ ) cap[i].clear();
  }

  fin.close ();
  fout.close ();

  return 0;
}