Cod sursa(job #3267438)

Utilizator Luca_georgescuLucageorgescu Luca_georgescu Data 11 ianuarie 2025 11:39:20
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda cex_7 Marime 1.73 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

struct vec
{
    int x,y,z;
}a[3505],lg[3505];

int n,t,dp[3505];
int nr;

void reset()
{
    for (int i=0; i<=n; i++ )
    {
        lg[i].x=0;
        lg[i].y=0;
        lg[i].z=0;
    }
}

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

void add(int q, int w)
{
    lg[q]=a[w];
}

void sclm()
{
    lg[1].x=a[1].x;
    lg[1].y=a[1].y;
    lg[1].z=a[1].z;
    nr=1;

    for (int i=2; i<=n; i++ )
    {
        if ( a[i].x>lg[nr].x && a[i].y>lg[nr].y && a[i].z>lg[nr].z )
        {
            nr++;
            lg[nr].x=a[i].x;
            lg[nr].y=a[i].y;
            lg[nr].z=a[i].z;
        }
        else
        {
            int st=1;
            int dr=nr;
            int poz=0;
            while ( st<=dr )
            {
                int m=(st+dr)/2;
                if ( a[i].x<lg[m].x || ( a[i].x==lg[m].x && a[i].y<lg[m].y ) || ( a[i].x==lg[m].x && a[i].y==lg[m].y && a[i].z<lg[m].z ) )
                {
                    poz=m;
                    dr=m-1;
                }
                else st=m+1;
            }
            lg[poz].x=a[i].x;
            lg[poz].y=a[i].y;
            lg[poz].z=a[i].z;
        }
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    f.tie(NULL);
    g.tie(NULL);

    f >> n >> t;
    while ( t )
    {
        for (int i=1; i<=n; i++ )
            f >> a[i].x >> a[i].y >> a[i].z;

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

        sclm();

        g << nr << '\n';
        t--;
    }
    return 0;
}