Cod sursa(job #1236239)

Utilizator horatiu11Ilie Ovidiu Horatiu horatiu11 Data 1 octombrie 2014 18:22:07
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
//horatiu11
# include <cstdio>
# include <vector>
# include <cstring>
# define LSB(x) (-x)&x
# define nmax 3501
using namespace std;
int AIB[nmax][nmax],n,t,Max,sol,x,y,z;
pair <int,int>a[nmax];
inline int max(int a, int b)
{
    if(a>b)return a;
    return b;
}
inline void update(int a, int b, int val)
{
    int i,j;
    for(i=a;i<=n;i+=LSB(i))
        for(j=b;j<=n;j+=LSB(j))
            AIB[i][j]=max(AIB[i][j],val);
}
inline int query(int a, int b)
{
    int i,j,Max;
    for(i=a;i>0;i-=LSB(i))
        for(j=b;j>0;j-=LSB(j))
            Max=max(Max,AIB[i][j]);
    return Max;
}
int main()
{
    int i;
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    scanf("%d%d",&n,&t);
    while(t)
    {
        for(i=1;i<=n;++i)
        {
            scanf("%d%d%d",&x,&y,&z);
            a[z]=make_pair(x,y);
        }
        for(i=1;i<=n;++i)
        {
            Max=query(a[i].first-1,a[i].second-1);
            update(a[i].first,a[i].second,Max+1);
            sol=max(sol,Max+1);
        }
        printf("%d\n",sol);
        memset(AIB,0,sizeof(AIB));sol=0;
        --t;
    }
    return 0;
}