Pagini recente » Cod sursa (job #1028607) | Cod sursa (job #2821773) | Cod sursa (job #1935) | Cod sursa (job #3219474) | Cod sursa (job #1667138)
#include <stdio.h>
#include <cstring>
#include <algorithm>
#define nmax 3510
using namespace std;
struct date { int x,y,z; };
int n,m;
short int dp[nmax][nmax];
date t[nmax];
bool cmp(const date &a,const date &b)
{
if (a.x==b.x) return a.y*a.z<b.y*b.z; else
return a.x<b.x;
}
inline int lsb(int x)
{
return x&(-x);
}
int query(int x,int y)
{
int sol=0;
for (int i=x;i>0;i-=lsb(i))
for (int j=y;j>0;j-=lsb(j))
sol=max(sol,dp[i][j]);
return sol;
}
void update(int x,int y,int val)
{
for (int i=x;i<=n;i+=lsb(i))
for (int j=y;j<=n;j+=lsb(j))
dp[i][j]=max(dp[i][j],val);
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d %d",&n,&m);
for (int o=1;o<=m;o++) {
for (int i=1;i<=n;i++) scanf("%d %d %d",&t[i].x,&t[i].y,&t[i].z);
memset(dp,0,sizeof(dp));
sort(t+1,t+n+1,cmp);
for (int i=1;i<=n;i++) {
int l=query(t[i].y,t[i].z);
update(t[i].y,t[i].z,l+1);
}
printf("%d\n",query(n,n));
}
return 0;
}