Pagini recente » Cod sursa (job #2072134) | Cod sursa (job #1176603) | Cod sursa (job #1965871) | Cod sursa (job #1780906) | Cod sursa (job #2715640)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout("cutii.out");
struct ceva
{
int x,y,z;
} v[3510],best[3510];
int n,i,j,maxi,m,poz,lg,t;
int cmp(ceva a, ceva b)
{
return (a.x<b.x || (a.x==b.x && a.y<b.y) || (a.x==b.x && a.y==b.y && a.z<b.z));
}
int verif(int a,int b)
{
return (best[a].x<=v[b].x && best[a].y<=v[b].y && best[a].z<=v[b].z &&
best[a].x>v[b-1].x && best[a].y>v[b-1].y && best[a].z>v[b-1].z);
}
int cb(int x)
{
int st=1,dr=lg,mij,ok=1;
while(st<=dr)
{
mij=(st+dr)/2;
if(verif(mij,x))
st=mij+1;
else
{
dr=mij-1;
ok=mij;
}
}
return ok;
}
void make_dp()
{
best[1]=v[1];
lg=1;
for(i=2; i<=n; i++)
{
if(v[i].x>best[lg].x && v[i].y>best[lg].y && v[i].z>best[lg].z)
best[++lg]=v[i];
else
{
poz=cb(i);
best[poz]=v[i];
}
}
fout<<lg<<'\n';
for(i=1; i<=lg; i++)
best[i].x=best[i].y=best[i].z=0;
}
int main()
{
fin>>n>>t;
while(t--)
{
for(i=1; i<=n; i++)
fin>>v[i].x>>v[i].y>>v[i].z,best[i].x=best[i].y=best[i].z=0;
sort(v+1,v+n+1,cmp);
make_dp();
}
return 0;
}