Cod sursa(job #2644283)

Utilizator adiaioanaAdia R. adiaioana Data 24 august 2020 10:14:01
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda prbd2 Marime 1.58 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
pair <int, pair<int,int> > a[4000];
struct chestie{
    int X, Y;
    bool operator <(const chestie& rhs)
    {
        return (X < rhs.X && Y < rhs.Y);
    }

    bool operator >(const chestie& rhs)
    {
        return (X > rhs.X && Y > rhs.Y);
    }
    bool operator ==(const chestie& rhs)
    {
        return (X == rhs.X && Y == rhs.Y);
    }
};
chestie v[4000];
int N,T, sirc[4000],lg[4000],lsir,lgm,poz, ind;
int caut(chestie val);
int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(0);
    cin>>N>>T;
    while(T--)
    {
        for(int i=1; i<=N; lg[i]=0,++i)
            cin>>a[i].first>>a[i].second.first>>a[i].second.second;
        sort(a+1,a+N+1);
        for(int i=1; i<=N; ++i)
            v[i].X=a[i].second.first,
            v[i].Y=a[i].second.second;
        lgm=0;
        for(int i=1; i<N; ++i)
        {
            lg[i]=max(lg[i],1);
            for(int j=i+1; j<=N; ++j)
                if(v[i]<v[j])
                    lg[j]=max(lg[j],lg[i]+1);
            lgm=max(lgm,lg[i]);
        }
        lgm=max(lgm,lg[N]);
        cout<<lgm<<'\n';
    }
    return 0;
}

int caut(chestie val)
{
    int st=0, dr=lsir, mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[sirc[mij]]<val && v[sirc[mij+1]]>val)
            return mij;
        else if(v[sirc[mij+1]]<val)
            st=mij+1;
        else dr=mij-1;
    }
    if(v[sirc[lsir]]<val)
        return lsir;
    else return 0;
}