Cod sursa(job #2461922)

Utilizator StanCatalinStanCatalin StanCatalin Data 26 septembrie 2019 15:45:59
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;

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

const int dim = 3505;

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

int n,teste,aib[dim][dim],best[dim];

bool cmp(cutie a,cutie b)
{
    return (a.x < b.x);
}

int query(int x,int y)
{
    int ans = 0;
    for (int i=x; i>0; i -=i&(-i))
    {
        for (int j=y; j>0; j-=j&(-j))
        {
            ans = max(ans , aib[i][j]);
        }
    }
    return ans;
}

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

int main()
{
    in >> n >> teste;

    int rasp = -1;
    while (teste)
    {
        teste--;

        for (int i=1; i<=n; i++)
        {
            in >> c[i].x >> c[i].y >> c[i].z;
        }

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

        rasp = 0;
        for (int i=1; i<=n; i++)
        {
            best[i] = query(c[i].y , c[i].z) + 1;
            rasp = max(rasp , best[i]);
            update(c[i].y , c[i].z , best[i]);
        }

        out << rasp << "\n";
        memset(aib, 0 , sizeof(aib));
        memset(best , 0 , sizeof(best));
    }
    return 0;
}