Cod sursa(job #483407)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 8 septembrie 2010 16:30:48
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

struct cutie{
int x;
int y;
int z;
};
cutie V[3505];

int L,N,P[3505];

struct cmp{

public :
    inline bool operator()(const cutie&a,const cutie&b){return a.z>b.z;}
};

inline bool mare(const cutie &a,const cutie &b)
{
    if(a.x>b.x&&a.y>b.y&&a.z>b.z)return 1;
    return 0;
}

int search(cutie key)
{
    int i,step=1;
    while((step<<1)<=L)step<<=1;
    for(i=0;step;step>>=1)
        if(i+step<=L&&mare(key,V[P[i+step]]))
            i+=step;
    return i;
}

int main()
{
    int T,i,l;
    in>>N>>T;
    while(T--)
    {
        for(i=0;i<=N+1;++i)P[i]=0;
        for(i=1;i<=N;i++)
            in>>V[i].x>>V[i].y>>V[i].z;
        sort(V+1,V+N+1,cmp());
        P[1]=1,L=1;
        for(i=2;i<=N;i++)
        {
            l = search(V[i]);
            if(P[l+1]==0)P[l+1]=i,L++;
            else if(mare(V[P[l+1]],V[i]))
                    P[l+1]=i;
        }
        out<<L<<'\n';
    }
    return 0;
}