Cod sursa(job #1426343)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 29 aprilie 2015 15:22:12
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>

#define boxx pair < int , pair < int , int > >
#define X first
#define Y second.first
#define Z second.second

using namespace std;

const int Nmax = 3510;

int n , T , i , crt , lg;

boxx box[Nmax];

vector < boxx > left;
vector < boxx > :: iterator poz;

bool comp(boxx a , boxx b)
{
    return (a.X < b.X && a.Y < b.Y && a.Z < b.Z);
}

int main()
{
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);

    for (scanf("%d %d", &n, &T); T; --T)
    {
        for (i = 1; i <= n; ++i)
            scanf("%d %d %d", &box[i].X , &box[i].Y , &box[i].Z);

        sort(box + 1 , box + n + 1);

        for (lg = 0 , i = 1; i <= n; ++i)
        {
            poz = upper_bound(left.begin() , left.end() , box[i]);

            if (poz == left.end() && (left.empty() || comp(*(--poz) , box[i])))
            {
                left.push_back(box[i]);
                lg = left.size();
            }
            else if (poz == left.begin() || comp(*(--poz) , box[i]))
            {
                if (comp(*poz , box[i])) poz++;
                *poz = box[i];
            }
        }

        left.clear();

        printf("%d\n", lg);
    }

    return 0;
}