Pagini recente » Cod sursa (job #1889739) | Cod sursa (job #1758876) | Cod sursa (job #311751) | Cod sursa (job #1065992) | Cod sursa (job #1377617)
#include <fstream>
#include <algorithm>
#define ub(i) i&(-i)
#define nmax 3510
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
short aib[nmax][nmax];
int n,din[nmax];
struct cutie{int x;int y;int z;};
cutie v[nmax];
bool compare(const cutie &a,const cutie &b)
{
return a.x<b.x;
}
void update(int l,int c,int x)
{
int i,j;
for (i=l;i<=n;i+=ub(i))
for (j=c;j<=n;j+=ub(j))
aib[i][j]=max(aib[i][j],short(x));
}
void updatezero(int l,int c)
{
int i,j;
for (i=l;i<=n;i+=ub(i))
for (j=c;j<=n;j+=ub(j))
aib[i][j]=0;
}
int query(int l, int c)
{
int i,j,sol=0;
for (i=l;i>=1;i-=ub(i))
for (j=c;j>=1;j-=ub(j))
sol=max(sol,int(aib[i][j]));
return sol;
}
void solve()
{
int i,j,sol=0;
for (i=1;i<=n;i++)
f>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,compare);
for (i=1;i<=n;i++) {
din[i]=query(v[i].y-1,v[i].z-1)+1;
update(v[i].y,v[i].z,din[i]);
}
for (i=1;i<=n;i++) {
updatezero(v[i].y,v[i].z);
sol=max(sol,din[i]);
}
g<<sol<<'\n';
}
int main()
{
f>>n;
int t;
for (f>>t;t;t--)
solve();
return 0;
}