Cod sursa(job #2097774)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 1 ianuarie 2018 17:16:15
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <algorithm>
#define VAL 3505
#define INF 1000000000

using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");

struct cutie
{
    int x, y, z;
};

cutie C[VAL];

int N, T, i, j, X, Y, ANS;
int ind[VAL][4], dp[VAL];

bool cmp(cutie A, cutie B)
{
    if (A.x==B.x)
    {
        if (A.y==B.y)
          return A.z<B.z;
        return A.y<B.y;
    }
    return A.x<B.x;
}

int Binary_Search(int nr, int X)
{
    int be=0, en=j;
    int mid, ans=0;
    while (be<=en)
    {
        mid=(be+en) / 2;
        if (ind[mid][nr]<=X)
        {
            ans=mid;
            be=mid+1;
        }
        else
          en=mid-1;
    }
    return ans;
}

int main()
{
    fin >> N >> T;
    for (i=1; i<=T; i++)
    {
        for (j=1; j<=N; j++)
          fin >> C[j].x >> C[j].y >> C[j].z;
        sort(C+1, C+N+1, cmp);
        ANS=0;
        for (j=1; j<=N; j++)
        {
            ind[j][2]=INF;
            ind[j][3]=INF;
            X=Binary_Search(2, C[j].y);
            Y=Binary_Search(3, C[j].z);
            dp[j]=min(X, Y)+1;
            ANS=max(ANS, dp[j]);
            ind[dp[j]][2]=min(ind[dp[j]][2], C[j].y);
            ind[dp[j]][3]=min(ind[dp[j]][3], C[j].z);
        }
        fout << ANS << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}