Cod sursa(job #3189310)

Utilizator stefanrotaruRotaru Stefan-Florin stefanrotaru Data 4 ianuarie 2024 19:56:35
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <algorithm>

using namespace std;

/// erase, getMax, query

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

int aib[3505][3505], n, t;

struct punct
{
    int a, b, c;
}v[3505];

bool comp (punct x, punct z)
{
    return x.a < z.a;
}

int query(int a, int b)
{
    int maxi = -1;

    for (int i = a; i; --i) {
        for (int j = b; j; --j) {
            maxi = max(aib[i][j], maxi);
        }
    }

    return maxi;
}

void update(int a, int b, int val)
{
    for (int i = a; i <= n; ++i) {
        for (int j = b; j <= n; ++j) {
            aib[i][j] = max(aib[i][j], val);
        }
    }
}

void sterge(int a, int b)
{
    for (int i = a; i <= n; ++i) {
        for (int j = b; j <= n; ++j) {
            aib[i][j] = 0;
        }
    }
}

int main()
{
    f >> n >> t;

    while (t--) {
        int ans = 0;

        for (int i = 1; i <= n; ++i) {
            f >> v[i].a >> v[i].b >> v[i].c;
        }

        sort(v + 1, v + n + 1, comp);

        for (int i = 1; i <= n; ++i) {
            int cost = query(v[i].b, v[i].c) + 1;
            update(v[i].b, v[i].c, cost);
            ans = max(ans, cost);
        }

        g << ans << '\n';

        for (int i = 1; i <= n; ++i) {
            sterge(v[i].b, v[i].c);
        }
    }

    return 0;
}