Cod sursa(job #2673082)

Utilizator StanCatalinStanCatalin StanCatalin Data 15 noiembrie 2020 18:52:12
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda ursus_retro_fara_alcool Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

using namespace std;

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

const int dim = 3505;

struct cutie
{
    int x,y,z;
} a[dim];

int n,t,aib[dim][dim],dp[dim];

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

int Query(int y,int z)
{
    int rasp = 0;
    for (int i=y; i>0; i -= i&(-i))
    {
        for (int j=z; j>0; j-= j&(-j))
        {
            rasp = max(rasp, aib[i][j]);
        }
    }
    return rasp;
}

void Update(int y,int z,int val)
{
    for (int i=y; i<=n; i += i&(-i))
    {
        for (int j=z; j<=n; j+= j&(-j))
        {
            aib[i][j] = max(aib[i][j], val);
        }
    }
}

int main()
{
    in >> n >> t;
    while (t--)
    {
        int dap = 0;
        memset(aib,0,sizeof(aib));
        for (int i=1; i<=n; i++)
        {
            in >> a[i].x >> a[i].y >> a[i].z;
        }
        sort(a+1,a+n+1, cmp);

        for (int i=1; i<=n; i++)
        {
            dp[i] = 1 + Query(a[i].y-1, a[i].z-1);
            dap = max(dap, dp[i]);
            Update(a[i].y, a[i].z, dp[i]);
        }
        out << dap << "\n";
    }

    return 0;
}