Pagini recente » Cod sursa (job #2689631) | Cod sursa (job #2201498) | Cod sursa (job #2943067) | Cod sursa (job #3192021) | Cod sursa (job #643479)
Cod sursa(job #643479)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define file_in "cutii.in"
#define file_out "cutii.out"
#define lsb(x) ((x)&(-(x)))
#define nmax 3511
struct cutie{
int x,y,z;
}p[nmax];
int Aib[nmax][nmax];
int N,T;
int cmp(cutie a, cutie b){
return a.x<b.x;
}
void add(int poz1, int poz2, int val){
int i,j;
for (i=poz1;i<=N;i+=lsb(i))
for (j=poz2;j<=N;j+=lsb(j))
Aib[i][j]=max(Aib[i][j],val);
}
int sol(int poz1, int poz2){
int i,j,ans=0;
for (i=poz1;i>=1;i-=lsb(i))
for (j=poz2;j>=1;j-=lsb(j))
ans=max(ans,Aib[i][j]);
return ans;
}
void goleste(int poz1, int poz2, int val){
int i,j;
for (i=poz1;i<=N;i+=lsb(i))
for (j=poz2;j<=N;j+=lsb(j))
Aib[i][j]=val;
}
int main(){
int i,ans;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &N, &T);
while(T--){
//memset(Aib,0,sizeof(Aib));
for (i=1;i<=N;++i)
scanf("%d %d %d", &p[i].x, &p[i].y, &p[i].z);
for(i=1;i<=N;++i)
goleste(p[i].y,p[i].z,0);
sort(p+1,p+N+1,cmp);
ans=0;
for (i=1;i<=N;++i){
int X=sol(p[i].y-1,p[i].z-1)+1;
ans=max(ans,X);
add(p[i].y,p[i].z,X);
}
printf("%d\n", ans);
}
return 0;
}