Pagini recente » Cod sursa (job #1238278) | Cod sursa (job #742918) | Cod sursa (job #1165002) | Cod sursa (job #2281140) | Cod sursa (job #1435526)
#include <fstream>
#include <string.h>
#include <algorithm>
#define dim 3501
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
short int arb[3*dim],sol[dim],teste,t,i,pozst,pozdr,Max,rez,ret,n,adev[3*dim];
struct cub
{
short int x;
short int y;
short int z;
}v[dim];
int cmp(cub o, cub p)
{
return o.x<p.x;
};
int query(int nod, int st, int dr)
{
if(st==dr)
return adev[nod];
int mijl=(st+dr)/2;
if(arb[2*nod]<ret&&arb[2*nod+1]<ret)
{
if(arb[2*nod]>arb[2*nod+1]&&pozst<=mijl)
query(2*nod,st,mijl);
else
if(arb[2*nod+1]>arb[2*nod]&&pozdr>mijl)
query(2*nod+1,mijl+1,dr);
}
else
if(arb[2*nod]<ret&&pozst<=mijl)
query(2*nod,st,mijl);
else
if(arb[2*nod+1]<ret&&pozdr>mijl)
query(2*nod+1,mijl+1,dr);
}
void upDate(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=ret;
adev[nod]=i;
return;
}
int mijl=st+(dr-st)/2;
if(v[i].y<=mijl)
upDate(2*nod,st,mijl);
else
upDate(2*nod+1,mijl+1,dr);
arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}
int main()
{
fin>>n>>teste;
for(t=1;t<=teste;t++)
{
Max=0;
for(i=1;i<=3*dim;i++)
{
arb[i]=3800;
adev[i]=0;
}
for(i=1;i<=n;i++)
sol[i]=0;
for(i=1;i<=n;i++)
fin>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++)
{
pozst=1;
pozdr=v[i].y-1;
ret=v[i].z;
rez=0;
rez=query(1,1,n);
sol[i]=sol[rez]+1;
if(sol[i]>Max)
Max=sol[i];
upDate(1,1,n);
}
fout<<Max<<'\n';
}
return 0;
}