Cod sursa(job #3266764)

Utilizator cristian46290Petre Cristian cristian46290 Data 10 ianuarie 2025 10:47:55
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream f("cutii.in");
ofstream g("cutii.out");

const int nMax = 3e3 + 5e2 + 5;

int T, n;
int lis[nMax];
struct DIMENSIUNI
{
    int x, y, z;
}a[nMax];

bool cmp1(DIMENSIUNI z,DIMENSIUNI b)
{
    return (z.x < b.x && z.y < b.y && z.z < b.z);
}

bool cmp2(DIMENSIUNI z,DIMENSIUNI b)
{
    return (z.x > b.x && z.y > b.y && z.z > b.z) || (z.x == b.x && z.y == b.y && z.z == b.z);
}


bool cmp(DIMENSIUNI z,DIMENSIUNI b)
{
    if (z.x != b.x)return z.x < b.x;
    if (z.y != b.y)return z.y < b.y;
    if (z.z != b.z)return z.z < b.z;
    return cmp1(z,b);
}

bool cmp3(DIMENSIUNI z,DIMENSIUNI b)
{
    if (z.x != b.x)return z.x > b.x;
    if (z.y != b.y)return z.y > b.y;
    if (z.z != b.z)return z.z > b.z;
    return !cmp1(z,b);
}


int main()
{
    f >> n >> T;
    while(T){
        for (int i = 1;i <= n;i++){
            f >> a[i].x >> a[i].y >> a[i].z;
            lis[i] = 0;
        }

        sort(a+1,a+n+1,cmp);

        vector<DIMENSIUNI> v;
        //g << v[1].x << " ";
        v.push_back(a[1]);

        for (int i = 2;i <= n;i++){
            if (cmp2(a[i],v.back()) == true)v.push_back(a[i]);//,cout << 1 << " ";
            else{
                auto p = upper_bound(v.begin(),v.end(),a[i],cmp);
                if (p != v.end())*p = a[i];
            }
        }
        g << v.size() << '\n';
        T--;
    }
}