Pagini recente » Cod sursa (job #14152) | Cod sursa (job #232042) | Cod sursa (job #3267994) | Cod sursa (job #2377326) | Cod sursa (job #2673082)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int dim = 3505;
struct cutie
{
int x,y,z;
} a[dim];
int n,t,aib[dim][dim],dp[dim];
bool cmp(cutie a,cutie b)
{
if (a.x == b.x)
{
if (a.y == b.y)
{
return (a.z < b.z);
}
return (a.y < b.y);
}
return (a.x < b.x);
}
int Query(int y,int z)
{
int rasp = 0;
for (int i=y; i>0; i -= i&(-i))
{
for (int j=z; j>0; j-= j&(-j))
{
rasp = max(rasp, aib[i][j]);
}
}
return rasp;
}
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))
{
aib[i][j] = max(aib[i][j], val);
}
}
}
int main()
{
in >> n >> t;
while (t--)
{
int dap = 0;
memset(aib,0,sizeof(aib));
for (int i=1; i<=n; i++)
{
in >> a[i].x >> a[i].y >> a[i].z;
}
sort(a+1,a+n+1, cmp);
for (int i=1; i<=n; i++)
{
dp[i] = 1 + Query(a[i].y-1, a[i].z-1);
dap = max(dap, dp[i]);
Update(a[i].y, a[i].z, dp[i]);
}
out << dap << "\n";
}
return 0;
}