Pagini recente » Cod sursa (job #2546191) | Cod sursa (job #760592) | Cod sursa (job #224383) | Cod sursa (job #2779160) | Cod sursa (job #1231819)
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>
#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX 3700
#define lst(x) ((x)&(-x))
using namespace std;
int aib[NMAX][NMAX];
pair < int , PII > C[NMAX];
int MAX,N,i,T,current;
void Update(PII X,int value)
{
for (;X.F<=N;X.F+=lst(X.F))
for (int j=X.S;j<=N;j+=lst(j))
aib[X.F][j]=max(aib[X.F][j],value);
}
void Update_0(PII X)
{
for (;X.F<=N;X.F+=lst(X.F))
for (int j=X.S;j<=N;j+=lst(j))
aib[X.F][j]=0;
}
int Query(PII X)
{
int f=0;
for (;X.F;X.F-=lst(X.F))
for (int j=X.S;j;j-=lst(j))
f=max(f,aib[X.F][j]);
return f;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&N,&T);
while (T--)
{
for (i=1;i<=N;++i)
scanf("%d%d%d",&C[i].F,&C[i].S.F,&C[i].S.S);
sort(C+1,C+N+1);
for (i=1,MAX=0;i<=N;++i)
{
current=Query(C[i].S);
Update(C[i].S,current+1);
MAX=max(current+1,MAX);
}
for (i=1;i<=N;++i)
Update_0(C[i].S);
printf("%d\n",MAX);
}
return 0;
}