Pagini recente » Cod sursa (job #2164384) | Cod sursa (job #669816) | Cod sursa (job #793280) | Cod sursa (job #2910518) | Cod sursa (job #2376804)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int NMax=3505;
int N,T,AIB[NMax][NMax];
struct Cutii
{
int X,Y,Z;
} C[NMax];
bool Comp(Cutii A,Cutii B)
{
return A.X<B.X;
}
int Next(int A)
{
return A&(-A);
}
int Query(int A,int B)
{
int Ans=0;
for(int i=A; i>=1; i=i-Next(i))
for(int j=B; j>=1; j=j-Next(j))
Ans=max(Ans,AIB[i][j]);
return Ans;
}
void Update(int A,int B,int Val)
{
for(int i=A; i<=N; i=i+Next(i))
for(int j=B; j<=N; j=j+Next(j))
AIB[i][j]=max(AIB[i][j],Val);
}
void Begin(int A,int B)
{
for(int i=A; i<=N; i=i+Next(i))
for(int j=B; j<=N; j=j+Next(j))
AIB[i][j]=0;
}
int main()
{
fin>>N>>T;
for(int p=1; p<=T; p++)
{
for(int i=1; i<=N; i++)
fin>>C[i].X>>C[i].Y>>C[i].Z;
sort(C+1,C+1+N,Comp);
for(int i=1; i<=N; i++)
{
int Val=1+Query(C[i].Y-1,C[i].Z-1);
Update(C[i].Y,C[i].Z,Val);
}
fout<<Query(N,N)<<'\n';
for(int i=1; i<=N; i++)
Begin(C[i].Y,C[i].Z);
}
return 0;
}