Cod sursa(job #2518887)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 6 ianuarie 2020 18:07:43
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <vector>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

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

struct cutie {
    int x, y, z;
    bool operator<(const cutie &other) const {
        return x < other.x && y < other.y && z < other.z;
    }
} v[3510];

int n, t, res;
int dp[3510];
vector<cutie> p;

void cb(int st, int dr, int index) {
    if(!p.size() || p[p.size()-1] < v[index]) {
        p.push_back(v[index]);
        return;
    }
    if(!(p[0] < v[index])) {
        p[0] = v[index];
        return;
    }
    while(dr-st-1 > 0) {
        int m = (st+dr) / 2;
        if(p[m] < v[index]) st = m;
        else dr = m;
    }
    p[dr] = v[index];
}

bool cmp(cutie a, cutie b) {
    if (a.x > b.x) return 0;
    else if(a.x == b.x) {
        if(a.y > b.y) return 0;
        if(a.y == b.y) {
            if(a.z > b.z) return 0;
            else return 1;
        }
        else return 1;
    }
    else return 1;
}

void solve() {
    while(t--) {
        for(int i = 1; i <= n; i++)
            fin >> v[i].x >> v[i].y >> v[i].z;

        sort(v+1, v+n+1, cmp);
 /*       res = 0;
        memset(dp, -1, sizeof dp);
        for(int i = 1; i <= n; i++) {
            dp[i] = 1;
            for(int j = i-1; j >= 1; j--)
                if(v[j] < v[i] && dp[i] < dp[j]+1)
                    dp[i] = dp[j]+1;
            if(dp[i] > res) res = dp[i];
        }

        fout << res << '\n';*/
        p.clear();
        for(int i = 1; i <= n; i++)
            cb(0, p.size()-1, i);

        fout << p.size() << '\n';
    }
}

int main() {
    fin >> n >> t;
    solve();
}