Cod sursa(job #464462)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 20 iunie 2010 12:25:30
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define file_in "cutii.in"
#define file_out "cutii.out"

#define nmax 3500

struct cutie
{
    int x,y,z;
}
p[nmax];

int n,Q;

int aib[nmax][nmax];

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%d %d",&n,&Q);

}

#define lsb(x) (x&(-x))
#define max(x,y) (x>y?x:y)

int cmp(cutie a, cutie b)
{
    return a.x<b.x;
}

void baga(int x, int y, int val)
{
    int i,j;

    for (i=x;i<=n;i+=lsb(i))
         for (j=y;j<=n;j+=lsb(j))
              aib[i][j]=max(aib[i][j],val);
}

int afla(int x, int y)
{
    int i,j;
    int maxx=0;

    for (i=x;i;i-=lsb(i))
         for (j=y;j;j-=lsb(j))
              maxx=max(maxx,aib[i][j]);
     return maxx;

}

void solve()
{
    int i;
    while(Q--)
    {
        memset(aib,0,sizeof(aib));
       for (i=1;i<=n;++i)
       {
           scanf("%d %d %d", &p[i].x, &p[i].y, &p[i].z);
       }

       sort(p+1,p+n+1,cmp);

       for (i=1;i<=n;++i)
       {
            int val=afla(p[i].y-1,p[i].z-1);
            baga(p[i].y,p[i].z,val+1);
       }

       printf("%d\n", afla(n,n));

    }
}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}