Cod sursa(job #1162809)

Utilizator span7aRazvan span7a Data 31 martie 2014 23:29:22
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include<cstdio>
#define M -2000000000
#include<algorithm>
#include<cstring>
using namespace std;
FILE *f=fopen("cutii.in","r");
FILE *g=fopen("cutii.out","w");
struct cut
{
    int x,y,z;
};
cut L[3501],q[3501];
int perm[3501],nr,n,k,maxim,lung;
int cmp(cut a,cut b)
{
    if(a.x>b.x&&a.y>b.y&&a.z>b.z)return 1;
    return 0;
}
bool cmp1(int a,int b)
{
    if(L[a].x>L[b].x)return false;
     else
          {

           if(L[a].x==L[b].x)
               {
                  if(L[a].y>L[b].y) return false;
                    else
                      {
                       if(L[a].y==L[b].y)
                              {
                                 if(L[a].z>L[b].z) return false;
                                else return true;
                              }
                      }
               }
          }
}
int cauta(cut x)
{
    int inc=1,sf=lung,m;
    while(inc<=sf)
    {
        m=(inc+sf)/2;
        if(cmp(x,q[perm[m]])==1)
            inc=m+1;
        else sf=m-1;
    }

    if(inc==lung+1){lung++;return lung;}
    return inc;
}
int scm()
{
     int i,p;
    for(i=1;i<=k;i++){q[i].x=0;q[i].y=0;q[i].z=0;}

    for(i=1;i<=k;i++)
   {
        p=cauta(L[perm[i]]);
        q[p]=L[perm[i]];
   }
   fprintf(g,"%d\n",lung);

}
int main()
{
    int i,i1,j,maxx;
    fscanf(f,"%d%d",&k,&n);
    for(i=1;i<=n;i++)
    {

        for(j=1;j<=k;j++)
        {
        fscanf(f,"%d%d%d",&L[j].x,&L[j].y,&L[j].z);
        }
        for(i1=1;i1<=k;i1++)perm[i1]=i1;
        sort(perm+1,perm+k+1,cmp1);
        lung=0;
        scm();
    }

    return 0;
}