Cod sursa(job #3144632)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 9 august 2023 14:54:14
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>
#define ub(x) (x & -x)

using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie {
    int x, y, z;
} c[3502];
int n, t, i, d[3502];
int a[3502][3502], r;

static inline bool cmp(cutie a, cutie b){
    return (a.x < b.x);
}

static inline void update(int pi, int pj, int val) {
    for(int i = pi; i < 3501; i += ub(i)) {
        for(int j = pj; j < 3501; j += ub(j)) {
            a[i][j] = max(a[i][j], val);
            if(val == -1) a[i][j] = 0;
        }
    }
}

static inline int query(int pi, int pj) {
    int r = 0;
    for(int i = pi; i > 0; i -= ub(i)) {
        for(int j = pj; j > 0; j -= ub(j)) {
            r = max(a[i][j], r);
        }
    }
    return r;
}


int main() {
    fin >> n >> t;
    while(t--) {
        for(i = 1; i <= n; i++) fin >> c[i].x >> c[i].y >> c[i].z;
        sort(c + 1, c + n + 1, cmp);
        r = 0;
        for(i = 1; i <= n; i++) {
            int t = query(c[i].y - 1, c[i].z - 1);
            d[i] = t + 1;
            if(d[i] > r) r = d[i];

            update(c[i].y, c[i].z, d[i]);
        }

        fout << r << "\n";
        for(i = 1; i <= n; i++) update(c[i].y, c[i].z, -1);
    }

    return 0;
}