Pagini recente » Cod sursa (job #1512859) | Cod sursa (job #2663774) | Cod sursa (job #853942) | Cod sursa (job #2613951) | Cod sursa (job #1223426)
#include <fstream>
#include <algorithm>
using namespace std;
struct cutie{
int h,w,l;
cutie(int h=0,int w=0,int l=0): h(h), w(w), l(l) {}
}v[3505];
bool operator<(const cutie &a,const cutie &b){
return (a.h<b.h);
}
#define lsb(x) ((x)&(-x))
int aib[3505][3505];
int n;
inline void update(int p1,int p2,int val){
for(;p1<=n;p1+=lsb(p1))
for(;p2<=n;p2+=lsb(p2))
aib[p1][p2]=max(aib[p1][p2],val);
}
inline void update2(int p1,int p2){
for(;p1<=n;p1+=lsb(p1))
for(;p2<=n;p2+=lsb(p2))
aib[p1][p2]=0;
}
inline int query(int p1,int p2){
int ans=0;
for(;p1;p1-=lsb(p1))
for(;p2;p2-=lsb(p2))
ans=max(ans,aib[p1][p2]);
return ans;
}
int din[3505];
int main()
{
ifstream cin("cutii.in");
ofstream cout("cutii.out");
int t=0;
cin>>n>>t;
while(t--){
for(int i=1;i<=n;i++)
cin>>v[i].h>>v[i].w>>v[i].l;
sort(v+1,v+n+1);
int ans=0;
for(int i=1;i<=n;i++){
din[i]=query(v[i].w-1,v[i].l-1)+1;
if(din[i]>ans)
ans=din[i];
update(v[i].w,v[i].l,din[i]);
}
cout<<ans<<'\n';
for(int i=1;i<=n;i++)
update2(v[i].w,v[i].l);
}
cin.close();
cout.close();
return 0;
}