Pagini recente » Cod sursa (job #1239701) | Cod sursa (job #402758) | Cod sursa (job #203723) | Cod sursa (job #472003) | Cod sursa (job #228818)
Cod sursa(job #228818)
#include <stdio.h>
#include <set>
#include <algorithm>
using namespace std;
short int n, i, j, k, aib[3510][3510], a, b, c, v[3510][10], rez, l, t;
pair <short int, pair<short int, short int> > p[3510];
short int lsb(short int x)
{
return x&(x-1)^x;
}
short int query(short int a, short int b)
{
short int x, y, z;
z=0;
for(x=a; x>0; x-=lsb(x))
{
for(y=b; y>0; y-=lsb(y))
{
if(aib[x][y]>z) z=aib[x][y];
}
}
return z;
}
void update(short int a, short int b)
{
short int x, y;
for(x=a; x<=n; x+=lsb(x))
{
for(y=b; y<=n; y+=lsb(y))
{
if(aib[x][y]<k+1) aib[x][y]=k+1;
}
}
}
int main()
{
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
scanf("%d %d", &n, &t);
for(l=1; l<=t; l++)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
aib[i][j]=0;
}
rez=0;
for(i=1; i<=n; i++)
{
scanf("%d %d %d", &a, &b, &c);
p[i]=make_pair(a, make_pair(b, c));
}
sort(p+1, p+n+1);
for(i=1; i<=n; i++)
{
v[i][0]=p[i].second.first;
v[i][1]=p[i].second.second;
k=query(v[i][0]-1, v[i][1]-1);
if(k+1>rez) rez=k+1;
update(v[i][0], v[i][1]);
}
printf("%d\n", rez);
}
return 0;
}