Pagini recente » Cod sursa (job #1272199) | Cod sursa (job #2758272) | Cod sursa (job #3204881) | Cod sursa (job #719216) | Cod sursa (job #2644280)
Utilizator |
Adia R. adiaioana |
Data |
24 august 2020 10:02:52 |
Problema |
Cutii |
Scor |
0 |
Compilator |
cpp-64 |
Status |
done |
Runda |
prbd2 |
Marime |
1.62 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; ++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;
lg[1]=1; sirc[1]=1;
lsir=1; lgm=1;
for(int i=2; i<=N; ++i)
{
ind=caut(v[i]);
sirc[ind+1]=i;
lg[i]=ind+1;
lgm=max(lgm, lg[i]);
lsir=max(lsir, lg[i]);
}
cout<<lgm<<'\n';
for(int i=0; i<=N; ++i)
lg[i]=sirc[i]=0;
}
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;
}