Cod sursa(job #3369268)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 19 octombrie 2026 00:11:10
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
//#include <bits/extc++.h>

using namespace std;

#define USE_STD_IO 0
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("cutii.in");
    ofstream fout("cutii.out");
#endif // USE_STD_IO

typedef array<int, 3> Cutie;
const int NMAX = 3502;
Cutie c[NMAX + 2];

int n, t, i, j, k, rasp;

int aib[NMAX + 2][NMAX + 2];

static inline void AIBUpdate(int pi, int pj, const int val) {
    for(int i = pi; i <= NMAX; i += (i & -i)) {
        for(int j = pj; j <= NMAX; j += (j & -j)) aib[i][j] = max(aib[i][j], val);
    }
}

static inline int AIBQuery(int pi, int pj) {
    int rasp = 0;
    for(int i = pi; i >= 1; i -= (i & -i)) {
        for(int j = pj; j >= 1; j -= (j & -j)) rasp = max(rasp, aib[i][j]);
    }
    return rasp;
}


static inline void Test() {
	for(i = 1; NMAX >= i; i++) {
		for(j = 1; NMAX >= j; j++) aib[i][j] = 0;
	}
	for(i = 1; i <= n; i++) {
		fin >> c[i][0] >> c[i][1] >> c[i][2];
	}
	sort(c + 1, c + n + 1);
	
	rasp = 0;
	for(i = 1; i <= n; i++) {
        int ma = 1 + AIBQuery(c[i][1] - 1, c[i][2] - 1);
        rasp = max(rasp, ma);

        AIBUpdate(c[i][1], c[i][2], ma);
    }

    fout << rasp << '\n';
}

int main() {
    #if USE_STD_IO
        ios_base::sync_with_stdio(false);
    #endif // USE_STD_IO
    fin.tie(nullptr);
    fout.tie(nullptr);

	fin >> n >> t;
	while(0 < t--) Test();

    return 0;
}