Pagini recente » Cod sursa (job #949566) | Cod sursa (job #1934467) | Cod sursa (job #1484751) | Istoria paginii runda/iconcurs3/clasament | Cod sursa (job #90600)
Cod sursa(job #90600)
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define fin "cutii.in"
#define fout "cutii.out"
#define Nmax 3501
struct box { int x,y,z; };
vector <box> v;
int N,T;
int ret,aib[Nmax][Nmax];
bool cmp(box a,box b)
{
return a.x < b.x;
}
int query(int x,int y)
{
int i,j,ret=0;
for ( i=x ; i>0 ; i -= ( i & ~(i - 1) ) )
for ( j=y ; j>0 ; j -= ( j & ~(j - 1) ) )
ret = max(ret,aib[i][j]);
return ret;
}
void update(int x,int y,int val)
{
int i,j;
for ( i=x ; i<=N ; i += ( i & ~(i - 1) ) )
for ( j=y ; j<=N ; j += ( j & ~(j - 1) ) )
aib[i][j]=max(aib[i][j],val);
}
void solve()
{
int i,curr;
sort(v.begin(),v.end(),cmp);
for (i=0;i<N;++i)
{
curr=query(v[i].y,v[i].z);
++curr;
ret=max(ret,curr);
update(v[i].y,v[i].z,curr);
}
}
void readdata()
{
int i;
box a;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d",&N,&T);
for (;T>0;--T)
{
v.clear();
for (i=0;i<N;++i)
{
scanf("%d%d%d",&a.x,&a.y,&a.z);
v.push_back(a);
}
memset(aib,0,sizeof(aib));
ret=0;
solve();
printf("%d\n",ret);
}
}
int main()
{
readdata();
return 0;
}