Cod sursa(job #609342)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 20 august 2011 19:39:10
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct box{int x,y,z;} v[3501];
struct cmp_b{bool operator()(box i,box j){return i.z<j.z;}};
int a[3501][3501];

int main()
{
    int n,t,i,j,k,aux,sol;
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%d %d\n",&n,&t);
    for (;t;--t)
    {
        sol=0;
        for (i=1;i<=n;++i)
            scanf("%d %d %d\n",&v[i].x,&v[i].y,&v[i].z);
        sort(v+1,v+n+1,cmp_b());
        for (i=1;i<=n;++i)
        {
            aux=0;
            for (j=v[i].x;j;j-=j&-j)
                for (k=v[i].y;k;k-=k&-k)
                    if (a[j][k]>aux)
                        aux=a[j][k];
            for (j=v[i].x;j<=n;j+=j&-j)
                for (k=v[i].y;k<=n;k+=k&-k)
                    if (a[j][k]<aux+1)
                        a[j][k]=aux+1;
            if (aux+1>sol)
                sol=aux+1;
        }
        for (i=1;i<=n;++i)
            for (j=v[i].x;j<=n;j+=j&-j)
                for (k=v[i].y;k<=n;k+=k&-k)
                    a[j][k]=0;
        printf("%d\n",sol);
    }
    return 0;
}