Cod sursa(job #2013067)

Utilizator MiaSanMiaRobert Lewandowski MiaSanMia Data 20 august 2017 13:54:54
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio>
#include <algorithm>
#define INF 2000000000
using namespace std;
struct cutii
{
    int x,y,z;
}v[3501];
int rez[3501];
bool comp(cutii a,cutii b)
{
    if(a.x==b.x)
        if(a.y==b.y)
            return a.z<b.z;
        else
            return a.y<b.y;
    else
        return a.x<b.x;
}
int cb(int n,int ct,int restr)
{
    int pas=1<<15;
    while(pas)
    {
        if(ct+pas<=n)
        {
            switch(restr)
            {
                case 0: if(v[ct+pas].x<v[n].x)
                            ct+=pas;
                        break;
                case 1: if(v[ct+pas].y<v[n].y)
                            ct+=pas;
                        break;
                case 2: if(v[ct+pas].z<v[n].z)
                            ct+=pas;
                        break;
            }
        }
        pas/=2;
    }
    return ct;
}
int main()
{
    int n,t,k,i,a,b,c,nr;
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%d%d",&n,&t);
    for(k=1; k<=t; k++)
    {
        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,comp);
        for(i=1; i<=n; i++)
        {
            a=cb(i,0,0);
            a=cb(a,0,0);
            b=cb(i,a,1);
            b=cb(b,a,1);
            c=cb(i,b,2);
            rez[i]=rez[c]+1;
        }
        nr=0;
        for(i=1; i<=n; i++)
        {
            if(rez[i]>nr)
                nr=rez[i];
            rez[i]=0;
        }
        printf("%d\n",nr);
    }
    return 0;
}