Pagini recente » Cod sursa (job #1041433) | Cod sursa (job #566896) | Cod sursa (job #2075067) | Cod sursa (job #2851653) | Cod sursa (job #2078900)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
FILE *in = fopen("cutii.in","r");
FILE *out = fopen("cutii.out","w");
int n,t,aib[3505][3505];
struct element
{
int x,y,z;
};
void update(int px,int py,int val)
{
while(px>0)
{
while(py>0)
{
aib[px][py] = max(aib[px][py],val);
py -= py&(-py);
}
px -= px&(-px);
}
}
int query(int px,int py)
{
int ma=0;
while(px<=n)
{
while(py<=n)
{
ma=max(ma,aib[px][py]);
py += py &(-py);
}
px += px & (-px);
}
return ma;
}
void clearr(int px,int py)
{
while(px>0)
{
while(py>0)
{
aib[px][py] = 0;
py -= py&(-py);
}
px -= px&(-px);
}
}
inline bool cmp(element a, element b)
{
if(a.x == b.x)
{
if(a.y == b.y)
return a.z < b.z;
return a.y < b.y;
}
return a.x < b.x;
}
int main()
{
fscanf(in,"%d%d",&n,&t);
while(t)
{
int ans=0;
vector <element> v;
v.push_back({0,0,0});
for(int i=1;i<=n;i++)
{
int x ,y,z;
fscanf(in,"%d%d%d",&x,&y,&z);
v.push_back({x,y,z});
}
sort(v.begin()+1,v.end(),cmp);
for(int i=n;i>=1;i--)
{
int sol=query(v[i].y + 1,v[i].z + 1)+1;
ans=max(sol,ans);
update(v[i].y,v[i].z,sol);
}
fprintf(out,"%d\n",ans);
for(int i=n;i>=1;i--)
clearr(v[i].y,v[i].z);
t--;
}
return 0;
}