Pagini recente » Cod sursa (job #2485505) | Cod sursa (job #2688374) | Cod sursa (job #2268203) | Cod sursa (job #77861) | Cod sursa (job #1558281)
#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;
}
void init(int a,int b)
{
for (int i = a;i <= n;i += i & (-i))
for (int j = b;j <= n;j += j & (-j))
bit[i][j] = 0;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d %d",&n,&t);
while (t--)
{
int sol = 0;
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]);
}
for (int i = 1;i <= n;i++)
init(ar[i].y,ar[i].z);
printf("%d\n",sol);
}
return 0;
}