Cod sursa(job #2644274)

Utilizator TudorChirila11Tudor Chirila TudorChirila11 Data 24 august 2020 09:51:31
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda prbd2 Marime 1.31 kb
#include <bits/stdc++.h>
#define st first
#define nd second
#define N 3501
using namespace std;
FILE *fin=fopen("cutii.in","r");
FILE *fout=fopen("cutii.out","w");
struct chestie
{
    int x, y, z;
}v[N];
int n, m, i, j, ans, dp[N], t, best[N], k;
bool comp(chestie a, chestie b)
{
    if(a.x!=b.x)
        return a.x>b.x;
    if(a.y!=b.y)
        return a.y>b.y;
    return a.z>b.z;
}
bool ok(int m, chestie x)
{
    m=best[m];
    return v[m].x>x.x&&v[m].y>x.y&&v[m].z>x.z;
}
int cautbin(int l, int r, chestie x)
{
    while(l<r)
    {
        int m=(l+r+1)/2;
        if(ok(m,x))
            l=m;
        else r=m-1;
    }
    return l;
}
int main()
{
    fscanf(fin,"%d%d",&n,&t);
    while(t--)
    {
        for(i=1;i<=n;++i)
            {
                dp[i]=1;
                fscanf(fin,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
            }
        sort(v+1,v+n+1,comp);
        k=0;
        ans=0;
        for(i=1;i<=n;++i)
        {
            int p=cautbin(0,k,v[i]);
            if(k<=p||!ok(p,v[i]))
            {
                best[++k]=i;
            }
            ans=max(ans,p+1);
            if(v[i].x>v[best[p+1]].x&&v[i].y>v[best[p+1]].y&&v[i].z>v[best[p+1]].z)
                best[p+1]=i;
        }
        fprintf(fout,"%d\n",ans);
    }
    return 0;
}