Cod sursa(job #3267604)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 11 ianuarie 2025 15:40:21
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda cex_7 Marime 1.27 kb
#include <algorithm>
#include <fstream>

using namespace std;

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

struct ceva{
    int h, l, c;
}a[3505];

int n, q, dp[3505], aib[3505][3505];

int ub(int x){
    return (x&(-x));
}

void add(int l, int c, int val)
{
    for(int i = l; i <= n; i += ub(i))
        for(int j = c; j <= n ; j += ub(j))
            aib[i][j] = max(aib[i][j], val);
}

int query(int l, int c)
{
    int maxi = 0;
    for(int i = l; i >= 1; i -= ub(i))
        for(int j = c; j >= 1; j -= ub(j))
            maxi = max(maxi, aib[i][j]);

    return maxi;
}

bool cmp(ceva x, ceva y){
    return x.h < y.h;
}

int main()
{
    f >> n >> q;
    for(; q >= 1; q --)
    {
        for(int i = 1; i <= n; i ++)
            f >> a[i].h >> a[i].l >> a[i].c;

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

        for(int i = 1; i <= n; i ++)
        {
            dp[i] = query(a[i].l - 1, a[i].c - 1) + 1;
            add(a[i].l, a[i].c, dp[i]);
        }

        int maxi = 0;
        for(int i = 1; i <= n; i ++)
            maxi = max(maxi, dp[i]), dp[i] = 0;

        g << maxi << '\n';

        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= n; j ++)
                aib[i][j] = 0;
    }
    return 0;
}