Cod sursa(job #3363572)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 19 august 2026 14:05:20
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n, dp[3503];
int aib[3503][3503];

struct Iris {
    int x, y, z;
}v[3503];

inline int cmp(Iris a, Iris b) { return a.x < b.x; }

inline 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);
}

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

int main()
{
    int tt; fin >> n >> tt;
    while(tt--) {
        for(int i=1; i<=n; i++) {
            dp[i] = 0;
            fin >> v[i].x >> v[i].y >> v[i].z;
            for(int j=1; j<=n; j++) aib[i][j] = 0;
        }
        sort(v+1, v+n+1, cmp);
        int rez = 0;
        for(int i=1; i<=n; i++) {
            int j = i;
            while(v[i].x == v[j].x) j++;
            for(int k=i; k<j; k++) dp[k] = 1 + query(v[k].y - 1, v[k].z - 1); //prelucrez pe toate cu v[i].x folosind x < v[i].x
            for(int k=i; k<j; k++) {
                update(v[k].y, v[k].z, dp[k]); //actualizez pt x > v[i].x
                rez = max(rez, dp[k]);
            }
            i = j - 1;
        }
        fout << rez << '\n';
    }

    return 0;
}

///ma asigur de x1<x2 si caut cu aib y1<y2 si z1<z2