Cod sursa(job #1041784)

Utilizator hevelebalazshevele balazs hevelebalazs Data 26 noiembrie 2013 09:17:40
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>
#define fr(i,a,b) for(int i=a;i<=b;++i)
#define t(i) i^(i&(i-1))
#define max(a,b) a>b?a:b
#define N 3500
struct b{int x,y,z;}a[N+1];
int d[N+1][N+1],t,n,m,M;;
int c(const void*x,const void*y){
    return (*(b*)x).x-(*(b*)y).x;
    }
void u(int i,int j,int x){
    while(i<=n){
        while(j<=n) d[i][j]=x?max(d[i][j],x):0,j+=t(j);
        i+=t(i);
        }
    }
int q(int i,int j){
    int m=0,x;
    while(i){
        x=j;
        while(x) m=max(d[i][x],m),x-=t(x);
        i-=t(i);
        }
    return m;
    }
int main(){
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%i%i",&n,&t);
    fr(y,1,t){
        M=0;
        fr(i,1,n)scanf("%i%i%i",&a[i].x,&a[i].y,&a[i].z);
        qsort(a+1,n,sizeof(b),c);
        fr(i,1,n){
            m=q(a[i].y-1,a[i].z-1)+1;
            M=max(m,M);
            u(a[i].y,a[i].z,M);
            }
        printf("%i\n",M);
        fr(i,1,n)u(a[i].y,a[i].z,0);
        }
    return 0;
    }