Cod sursa(job #3202231)

Utilizator Radu_VasileRadu Vasile Radu_Vasile Data 11 februarie 2024 10:30:19
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
#define MAXN 3500
ifstream cin("cutii.in");
ofstream cout("cutii.out");
struct cutie{
  int x, y, z;
}v[MAXN + 1];
int aib[MAXN + 1][MAXN + 1];
using namespace std;

void update(int y, int z, int l, int n){
  for( int i = y; i < n; i += (i & -i))
    for( int j = z; j < n; j += (j & -j))
      aib[i][j] = max(aib[i][j], l);
}
int query(int y, int z){
  int rez = 0;
  for( int i = y; i > 0; i -= (i & -i))
    for( int j = z; j > 0; j -= (j & -j))
      rez = max(aib[i][j], rez);
  return rez;
}

static inline int cmp(cutie a, cutie b){
  return a.x < b.x;
}
int main()
{
    int n, t, i, sol, j, rez;
    cin >> n >> t;
    while(t--){
      sol = -1;
      for(i = 1; i <= n; i++ )
        cin >> v[i].x >> v[i].y >> v[i].z;
      sort(v + 1, v + n + 1, cmp);
      for( i = 1; i <= n; i++ ){
        rez = query(v[i].y, v[i].z) + 1;
        sol = max(rez, sol);
        update(v[i].y, v[i].z, rez, n);
      }
      cout << sol << "\n";
      for( i = 1; i <= n; i++ ){
        for( j = 1; j <= n; j++ ){
          aib[i][j] = 0;
        }
      }
    }
    return 0;
}