Cod sursa(job #2926155)

Utilizator euyoTukanul euyo Data 17 octombrie 2022 09:30:29
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM = 3505;

struct qq {
  int a, b, c;
} v[DIM];

int aib[DIM][DIM], n;

void update( int x, int y, int val ) {
  for ( int i = x; i <= n; i += (i & -i) ) {
	for ( int j = y; j <= n; j += (j & -j) ) {
	  aib[i][j] = max(aib[i][j], val);
	}
  }
}

int query( int x, int y ) {
  int res = 0;
  for ( int i = x; i > 0; i -= (i & -i) ) {
	for ( int j = y; j > 0; j -= (j & -j) ) {
	  res = max(aib[i][j], res);
	}
  }
  return res;
}

int main() {
  int t;

  fin >> n >> t;
  while ( t-- ) {
	for ( int i = 0; i < n; ++i ) {
      fin >> v[i].a >> v[i].b >> v[i].c;
	}
	sort( v, v + n, []( const qq &x, const qq &y ) { return x.a < y.a; } );
    for ( int i = 0; i < n; ++i ) {
      int val = query( v[i].b, v[i].c );
	  update( v[i].b, v[i].c, val + 1 );
	}
	fout << query( n, n ) << "\n";
	for ( int i = 0; i <= n; ++i ) {
	  for ( int j = 0; j <= n; ++j ) {
		aib[i][j] = 0;
	  }
	}
  }
  fin.close();
  fout.close();
  return 0;
}