Pagini recente » Cod sursa (job #1870904) | Cod sursa (job #3317817) | Cod sursa (job #339126) | Cod sursa (job #2980425) | Cod sursa (job #462412)
Cod sursa(job #462412)
using namespace std;
#include<iostream>
#include<fstream>
#include<algorithm>
struct nod{ int x,y,z;};
nod v[3505];
int N,T,dp[3505];
int aib[3505][3505];
bool cmp(nod i,nod j) {return (i.x<j.x);}
ofstream fout("cutii.out");
inline int query(int y,int z)
{int v=0,i,j;
for(i=y;i;i-=(i&-i))
for(j=z;j;j-=(j&-j))
v=max(v,aib[i][j]);
return v;
}
inline void update(int y,int z,int v)
{int i,j;
for(i=y;i<=N;i+=(i&-i))
for(j=z;j<=N;j+=(j&-j))
aib[i][j]=max(v,aib[i][j]);
}
inline void update2(int y,int z,int v)
{int i,j;
for(i=y;i<=N;i+=(i&-i))
for(j=z;j<=N;j+=(j&-j))
aib[i][j]=v;
}
void cit()
{int i,j,k;
ifstream fin("cutii.in");
fin>>N>>T;
for(k=1;k<=T;k++)
{v[0].x=v[0].y=v[0].z=0;
for(i=1;i<=N;i++) dp[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++)
for(j=1;j<i;j++)
if(v[j].y<v[i].y&&v[j].z<v[i].z)
{if(dp[j]+1>dp[i])
dp[i]=dp[j]+1;
}*/
for(i=1;i<=N;i++)
{dp[i]=1+query(v[i].y-1,v[i].z-1);
update(v[i].y,v[i].z,dp[i]);
}
int max=0;
for(i=1;i<=N;i++)
if(max<dp[i])
max=dp[i];
for(i=1;i<=N;i++)
update2(v[i].y,v[i].z,0);
fout<<max<<"\n";
}
}
int main()
{
cit();
fout.close();
return 0;
}