Pagini recente » Cod sursa (job #2952712) | Cod sursa (job #14827) | Cod sursa (job #876988) | Cod sursa (job #1377582)
#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;
}
int update(int i,int j,int x)
{
for (;i>=1;i-=ub(i))
for (;j>=1;j-=ub(j))
aib[i][j]=max(aib[i][j],short(x));
}
int updatezero(int i,int j)
{
for (;i>=1;i-=ub(i))
for (;j>=1;j-=ub(j))
aib[i][j]=0;
}
int query(int i, int j)
{
int sol=0;
for (;i>=1;i-=ub(i))
for (;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;
}