Cod sursa(job #2644391)

Utilizator andu2006Alexandru Gheorghies andu2006 Data 24 august 2020 13:40:56
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda prbd2 Marime 1.16 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 someless(int pos1,int pos2){
    for(auto it : lastPos[pos1])
        if(v[it].b<v[pos2].b && v[it].c<v[pos2].c)
            return true;
    return false;
}
int getLen(int p){
    int l=1,r=n,ans=0;
    while(l<=r){
        int m=(l+r+1)/2;
        if(someless(m,p)){
            l=m+1;
            ans=m;
        }
        else r=m-1;
    }
    lastPos[ans+1].push_back(p);
    return ans+1;
}
void testt(){
    int ans=0;
    for(int i=1;i<=n;i++){
        fin>>v[i].a>>v[i].b>>v[i].c;
    }
    sort(v+1,v+n+1,cmp);
    for(int cnt=1;cnt<=n;cnt++){
        ans=max(ans,getLen(cnt));
    }
    fout<<ans<<'\n';
    for(int i=0;i<=n;i++)
        lastPos[i].clear();
}
int main()
{
    ios_base::sync_with_stdio(false); fin.tie(0); fout.tie(0);
    int k;
    fin>>n>>k;
    while(k--)
        testt();
    return 0;
}