Cod sursa(job #2709014)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 19 februarie 2021 17:15:33
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 4137;

struct numar
{
    int l, g, q, nr;
} v[NMAX], vmin[NMAX];

int cmp ( numar a, numar b )
{
    if ( a.l < b.l  &&  a.q < b.q  &&  a.g < b.g )
        return -1;
    if ( a.l > b.l  &&  a.q > b.q  &&  a.g > b.g )
        return 1;
    if ( a.l == b.l  &&  a.q == b.q  &&  a.g == b.g )
        return 0;
    return -10;
}

int n, t;

int hMax;

int l[NMAX];

int poz, k, imax;

int main()
{
    in >> n >> t;
    for ( int akd = 1 ; akd <= t ; ++akd )
    {
        for ( int i = 1 ; i <= n ; ++i )
            in >> v[i].l >> v[i].g >> v[i].q;
        l[1] = 1;
        k = 1;
        vmin[2] = v[1];
        imax = 0;
        for ( int i = 1 ; i <= n ; ++i )
        {
            int st = 1, dr = k, ans = 0, m;
            while ( st <= dr )
            {
                m = ( st + dr ) / 2;
                if ( cmp ( v[i], vmin[m] ) > 0 )
                {
                    ans = m;
                    st = m+1;
                }
                else
                    dr = m-1;
            }
            if ( ans )
            {
                if ( ans == k )
                {
                    vmin[++k] = v[i];
                    imax = i;
                }
                else
                    vmin[ans+1] = v[i];
            }
            else
            {
                if ( cmp ( v[i], vmin[1] ) == -1 )
                    vmin[1] = v[i];
            }
            l[i] = ans;
        }
        out << l[imax] << '\n';
    }
    return 0;
}