Cod sursa(job #2644390)

Utilizator andu2006Alexandru Gheorghies andu2006 Data 24 august 2020 13:29:50
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda prbd2 Marime 1.08 kb
#include<bits/stdc++.h>

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

const short NMAX = 3501;
struct cutie{int a,b,c;};
int n;
cutie v[NMAX];
vector<int> lastPos[NMAX];
bool cmp(cutie x, cutie y){
    return x.a<y.a || (x.a==y.a && (x.b<y.b || (x.b==y.b && x.c<y.c)));
}
bool noless(int pos1,int pos2){
    for(auto it : lastPos[pos1])
        if(v[it].a<=v[pos2].a && v[it].b<=v[pos2].b && v[it].c<=v[pos2].c)
            return false;
    return true;
}
int getLen(int p){
    int l=0,r=p;
    while(l<r){
        int m=(l+r+1)/2;
        if(noless(m,p)){
            l=m+1;
        }
        else r=m-1;
    }
    lastPos[r].push_back(p);
    return r;
}
void testt(){
    int ans=0;
    for(int i=0;i<n;i++){
        fin>>v[i].a>>v[i].b>>v[i].c;
    }
    sort(v,v+n,cmp);
    for(int cnt=0;cnt<n;cnt++){
        ans=max(ans,getLen(cnt));
    }
    fout<<ans+2<<'\n';
}
int main()
{
    ios_base::sync_with_stdio(false); fin.tie(0); fout.tie(0);
    int k;
    fin>>n>>k;
    while(k--)
        testt();
    return 0;
}