Pagini recente » Cod sursa (job #1987449) | Cod sursa (job #1744654) | Cod sursa (job #1227336) | Cod sursa (job #567570) | Cod sursa (job #1558278)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MN = 3504;
struct item
{
int x,y,z;
};
int n,t;
int dp[MN];
int bit[MN][MN];
item ar[MN];
bool comp(item a,item b)
{
return a.x < b.x;
}
void update(int a,int b,int val)
{
for (int i = a;i <= n;i += i & (-i))
for (int j = b;j <= n;j += j & (-j))
bit[i][j] = max(bit[i][j],val);
}
int query(int a,int b)
{
int sol = 0;
for (int i = a;i;i -= i & (-i))
for (int j = b;j;j -= j & (-j))
sol = max(sol,bit[i][j]);
return sol;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d %d",&n,&t);
while (t--)
{
int sol = 0;
memset(bit,0,sizeof(bit));
for (int i = 1;i <= n;i++)
scanf("%d %d %d",&ar[i].x,&ar[i].y,&ar[i].z);
sort(ar + 1,ar + 1 + n,comp);
for (int i = 1;i <= n;i++)
{
dp[i] = query(ar[i].y - 1,ar[i].z - 1) + 1;
update(ar[i].y,ar[i].z,dp[i]);
sol = max(sol,dp[i]);
}
printf("%d\n",sol);
}
return 0;
}