Pagini recente » Cod sursa (job #2891709) | Cod sursa (job #1287759) | Cod sursa (job #1589269) | Cod sursa (job #2473534) | Cod sursa (job #1418142)
#include<algorithm>
#include<cstdio>
#define bit(x) x&(-x)
#define MAX 3500
using namespace std;
struct cutie
{
int l,L,h;
};
int AIB[MAX+1][MAX+1];
int n;
cutie v[MAX+1];
void Curata(int x,int y)
{
for(int i=x;i<=n;i+=bit(i))
for(int j=y;j<=n &&AIB[i][j]!=0;j+=bit(j))
AIB[i][j]=0;
}
void Update(int x,int y,int valoare)
{
for(int i=x;i<=n;i+=bit(i))
for(int j=y;j<=n &&AIB[i][j]<valoare;j+=bit(j))
AIB[i][j]=valoare;
}
int Query(int x,int y)
{
int Max=0;
for(int i=x;i>0;i-=bit(i))
for(int j=y;j>0;j-=bit(j))
if (AIB[i][j]>Max) Max=AIB[i][j];
return Max;
}
bool meow(cutie a,cutie b){
if (a.l<b.l) return true;
return false;
}
int main(){
freopen ("cutii.in","r",stdin);
freopen ("cutii.out","w",stdout);
int T,i,j,Max,rez;
scanf ("%d%d",&n,&T);
for(j=1;j<=T;j++){
for(i=1;i<=n;i++)
scanf ("%d%d%d",&v[i].l,&v[i].L,&v[i].h);
sort(v+1,v+n+1,meow);
Max=0;
for(i=1;i<=n;i++){
rez=Query(v[i].L-1,v[i].h-1)+1;
if (Max<rez) Max=rez;
Update(v[i].L,v[i].h,rez);
}
printf ("%d\n",Max);
for(i=1;i<=n;i++)
Curata(v[i].L,v[i].h);
}
return 0;
}