Cod sursa(job #1231700)

Utilizator george_stelianChichirim George george_stelian Data 21 septembrie 2014 13:13:45
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define putere(x) (x)&(-x)

using namespace std;

struct paralelipiped
{
    int x,y,z;
    bool operator <(const paralelipiped &aux) const
    {
        return x<aux.x;
    }
}v[3510];
int aib[3505][3505],n,t,i,maxx,s;

void aib_update(int y,int z,int a)
{
    for(int i=y;i<=n;i+=putere(i))
        for(int j=z;j<=n;j+=putere(j))
            aib[i][j]=max(aib[i][j],a);
}

int aib_query(int y,int z)
{
    int s=0,i,j;
    for(i=y;i>0;i-=putere(i))
        for(j=z;j>0;j-=putere(j))
            s=max(s,aib[i][j]);
    return s;
}

int main()
{
    freopen("cutii.in", "r", stdin);
    freopen("cutii.out", "w", stdout);
    scanf("%d%d",&n,&t);
    for(;t;t--)
    {
        for(i=1;i<=n;i++) scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
        sort(v+1,v+1+n);
        maxx=0;
        memset(aib, 0, sizeof(aib));
        for(i=1;i<=n;i++)
        {
            s=aib_query(v[i].y,v[i].z)+1;
            aib_update(v[i].y,v[i].z,s);
            maxx=max(maxx,s);
        }
        printf("%d\n",maxx);
    }
    return 0;
}