Pagini recente » Cod sursa (job #2795949) | Cod sursa (job #108247) | Cod sursa (job #2397031) | Cod sursa (job #120306) | Cod sursa (job #2715625)
#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 verif(int a,int b)
{
return best[a].x<=v[b].x && best[a].y<=v[b].y && best[a].z<=v[b].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;
make_dp();
}
return 0;
}