Cod sursa(job #1164938)

Utilizator marcelPFake name marcelP Data 2 aprilie 2014 13:03:26
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
#define MAX 3600

struct box{int x, y, z;} a[MAX];
inline bool cmp(box a, box b){return a.x<b.x;}

int nr, n, t, maxim, AIB[MAX][MAX], modif[MAX][MAX];

int cauta(int x, int y)
{
    int i, j, m=0;
    for(i=x;i;i-=(i&(-i)))
    {
        for(j=y;j;j-=(j&(-j)))
        {
            if(modif[i][j]==t)
                m=max(m, AIB[i][j]);
        }
    }
    return m;
}

void introdu(int x, int y)
{
    int i, j;
    for(i=x;i<=n;i+=(i&(-i)))
    {
        for(j=y;j<=n;j+=(j&(-j)))
        {
            if(modif[i][j]==t)
            AIB[i][j]=max(AIB[i][j], nr);
            else
            {
                modif[i][j]=t;
                AIB[i][j]=nr;
            }
        }
    }
}

int main()
{
    int i;
    fin>>n>>t;
    while(t--)
    {
        for(i=1;i<=n;i++)
            fin>>a[i].x>>a[i].y>>a[i].z;
        sort(a+1, a+n+1, cmp);

        maxim=0;
        for(i=1;i<=n;i++)
        {
            nr=cauta(a[i].y, a[i].z)+1;
            introdu(a[i].y, a[i].z);
            maxim=max(maxim, nr);
        }
        fout<<maxim<<"\n";
    }
}