Pagini recente » Cod sursa (job #3166141) | Cod sursa (job #2476332) | Cod sursa (job #2275382) | Cod sursa (job #2896879) | Cod sursa (job #2412566)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct cut{
int x, y, z;
}cutii[3505];
int n, t, dp[3505], mat[3505][3505], rez;
bool operator<(cut a, cut b)
{
return a.x<b.x;
}
int query(int y, int z)
{
int ans=0;
for (int i=y; i>0; i-=(i&(-i)))
{
for (int j=z; j>0; j-=(j&(-j)))
{
ans=max(ans,mat[i][j]);
}
}
return ans;
}
void update(int y, int z, int val)
{
for (int i=y; i<=n; i+=(i&(-i)))
{
for (int j=z; j<=n; j+=(j&(-j)))
{
mat[i][j]=max(mat[i][j],val);
}
}
}
void reset(int y, int z)
{
for (int i=y; i<=n; i+=(i&(-i)))
{
for (int j=z; j<=n; j+=(j&(-j)))
{
mat[i][j]=0;
}
}
}
int main() {
f >> n >> t;
for (int test=1; test<=t; ++test)
{
for (int i=1; i<=n; ++i)
{
f >> cutii[i].x >> cutii[i].y >> cutii[i].z;
}
rez=0;
sort(cutii+1,cutii+n+1);
for (int i=1; i<=n; ++i)
{
dp[i]=query(cutii[i].y, cutii[i].z)+1;
update(cutii[i].y,cutii[i].z,dp[i]);
rez=max(rez,dp[i]);
}
g << rez << '\n';
for (int i=1; i<=n; ++i)
reset(cutii[i].y,cutii[i].z);
}
return 0;
}