Pagini recente » Cod sursa (job #820073) | Cod sursa (job #1615437) | Cod sursa (job #1905790) | Cod sursa (job #841527) | Cod sursa (job #826201)
Cod sursa(job #826201)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
#define NMAX 3501
struct cutie {
int x,y,z;
};
int c[NMAX][NMAX],l[NMAX],n;
cutie v[NMAX];
inline bool cmp(const cutie &a, const cutie &b)
{
return a.x>b.x;
}
inline int LSB(int x)
{
return x & (-x);
}
void update(int i, int j, int x)
{
int k;
for( ;i<=n;i=i+LSB(i))
for(k=j;k<=n;k=k+LSB(k))
c[i][k]=max(c[i][k],x);
}
void reset(int i, int j, int x)
{
int k;
for( ;i<=n;i=i+LSB(i))
for(k=j;k<=n;k=k+LSB(k))
c[i][k]=x;
}
int query(int i, int j)
{
int k,maxim;
maxim=0;
for( ;i>=1;i=i-LSB(i))
for(k=j;k>=1;k=k-LSB(k))
maxim=max(maxim,c[i][k]);
return maxim;
}
int main ()
{
int i,k,t,maxim;
ifstream f("cutii.in");
ofstream g("cutii.out");
f>>n>>t;
for(k=1;k<=t;k++) {
for(i=1;i<=n;i++)
f>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,cmp);
l[n]=1;
update(v[n].y,v[n].z,1);
for(i=n-1;i>=1;i--) {
l[i]=query(v[i].y-1,v[i].z-1)+1;
update(v[i].y,v[i].z,l[i]);
}
maxim=0;
for(i=1;i<=n;i++)
if(l[i]>maxim)
maxim=l[i];
l[n]=0;
reset(v[n].y,v[n].z,0);
for(i=n-1;i>=1;i--) {
l[i]=0;
reset(v[i].y,v[i].z,l[i]);
}
g<<maxim<<'\n';
}
f.close();
g.close();
return 0;
}