Pagini recente » Cod sursa (job #973497) | Cod sursa (job #2321527) | Cod sursa (job #766597) | Cod sursa (job #1359807) | Cod sursa (job #2097864)
#include <fstream>
#include <algorithm>
#define VAL 3505
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie
{
int x, y, z;
};
cutie C[VAL];
int N, T, i, j, ANS;
int aib[VAL][VAL], dp[VAL];
bool cmp(cutie A, cutie B)
{
return A.x<B.x;
}
int zero(int X)
{
return X & (-X);
}
void Rebuild(int L, int C)
{
int i, j;
for (i=L; i<=N; i+=zero(i))
for (j=C; j<=N; j+=zero(j))
aib[i][j]=0;
}
void Update(int L, int C, int X)
{
int i, j;
for (i=L; i<=N; i+=zero(i))
for (j=C; j<=N; j+=zero(j))
aib[i][j]=max(aib[i][j], X);
}
int Query(int L, int C)
{
int mx=0, i, j;
for (i=L; i>0; i-=zero(i))
for (j=C; j>0; j-=zero(j))
mx=max(mx, aib[i][j]);
return mx;
}
int main()
{
fin >> N >> T;
while (T)
{
for (i=1; i<=N; i++)
fin >> C[i].x >> C[i].y >> C[i].z;
sort(C+1, C+N+1, cmp);
ANS=0;
for (i=1; i<=N; i++)
{
dp[i]=Query(C[i].y, C[i].z)+1;
ANS=max(ANS, dp[i]);
Update(C[i].y, C[i].z, dp[i]);
}
for (i=1; i<=N; i++)
Rebuild(C[i].y, C[i].z);
fout << ANS << '\n';
T--;
}
fin.close();
fout.close();
return 0;
}