Pagini recente » Cod sursa (job #512751) | Cod sursa (job #24399) | Monitorul de evaluare | Borderou de evaluare (job #1519898) | Cod sursa (job #3349751)
#include <bits/stdc++.h>
#define N 3567
using namespace std;
ifstream in ("cutii.in");
ofstream out ("cutii.out");
struct aib{
int a[N][N];
void update(int px,int py,int val)
{
for (int x=px;x<N;x+=(x&-x))
{
for (int y=py;y<N;y+=(y&-y))
{
a[x][y]=max(a[x][y],val);
}
}
}
int query(int px,int py)
{
int mx=0;
for (int x=px;x>0;x-=(x&-x))
{
for (int y=py;y>0;y-=(y&-y))
{
mx=max(mx,a[x][y]);
}
}
return mx;
}
void reset(int px,int py)
{
for (int x=px;x<N;x+=(x&-x))
{
for (int y=py;y<N;y+=(y&-y))
{
a[x][y]=0;
}
}
}
}a;
struct cutie{
int x,y,z;
}v[N];
bool cmp(cutie a,cutie b)
{
if (a.z!=b.z)
return a.z<b.z;
if (a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
}
int main()
{
int n,t;
in>>n>>t;
for (int k=1;k<=t;k++)
{
for (int i=1;i<=n;i++)
{
in>>v[i].x>>v[i].y>>v[i].z;
}
sort(v+1,v+n+1,cmp);
int mx=0;
for (int i=1;i<=n;i++)
{
a.update(v[i].x,v[i].y,a.query(v[i].x,v[i].y)+1);
mx=max(mx,a.query(v[i].x,v[i].y));
}
out<<mx<<'\n';
for (int i=1;i<=n;i++)
{
a.reset(v[i].x,v[i].y);
}
}
return 0;
}