Cod sursa(job #2926702)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 18 octombrie 2022 14:23:38
Problema Cutii Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <bits/stdc++.h>
/// TONI BO$$ was here
/// #MLC

using namespace std;

int n, aib2d[3501][3501];

int zeros(int i)
{
    return i & (-i);
}

int query(int i, int j)
{
    int z = 0;
    while(i)
    {
        int k = j;
        while(k)
            z = max(z, aib2d[i][k]), k -= zeros(k);
        i -= zeros(i);
    }
    return z;
}

void update(int i, int j, int z)
{
    while(i <= n)
    {
        int k = j;
        while(k <= n)
            aib2d[i][k] = max(aib2d[i][j], z), k += zeros(k);
        i += zeros(i);
    }
}

void free(int i, int j)
{
    while(i <= n)
    {
        int k = j;
        while(k <= n)
            aib2d[i][k] = 0, k += zeros(k);
        i += zeros(i);
    }
}

struct box
{
    int i, j, k;
    bool operator <(const box &oth) const
    {
        return i < oth.i;
    }
}v[3501];

int main()
{
    int t, i;
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    cin >> n >> t;
    while(t--)
    {
        for(i = 0; i < n; i++)
            //v[i].i = getNr(), v[i].j = getNr(), v[i].k = getNr();
            cin >> v[i].i >> v[i].j >> v[i].k;
        sort(v, v + n);
        for(i = 0; i < n; i++)
        {
            int z = query(v[i].j, v[i].k);
            update(v[i].j, v[i].k, z + 1);
        }
        printf("%d\n", query(n, n));
        for(i = 0; i < n; i++)
            free(v[i].j, v[i].k);

    }

    return 0;
}