Pagini recente » Cod sursa (job #1887454) | Cod sursa (job #2208866) | Cod sursa (job #1548240) | Cod sursa (job #3179616) | Cod sursa (job #3183429)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 3500;
short int n, aib[N+1][N+1];
struct cutie
{
short int x, y, z;
};
ifstream in("cutii.in");
ofstream out("cutii.out");
bool cmp(cutie c1, cutie c2)
{
if (c1.x == c2.x)
{
if (c1.y == c2.y)
{
return (c1.z > c2.z);
}
return (c1.y > c2.y);
}
return (c1.x < c2.x);
}
short int interogare(short int lin, short int col)
{
short int l_max = 0;
while (lin != 0)
{
short int col_c = col;
while (col_c != 0)
{
l_max = max(l_max, aib[lin][col_c]);
short int p2 = (col_c & (-col_c));
col_c -= p2;
}
short int p2 = (lin & (-lin));
lin -= p2;
}
return l_max;
}
void actualizare(short int lin, short int col, short int lg)
{
while (lin <= n)
{
short int col_c = col;
while (col_c <= n)
{
aib[lin][col_c] = max(aib[lin][col_c], lg);
short int p2 = (col_c & (-col_c));
col_c += p2;
}
short int p2 = (lin & (-lin));
lin += p2;
}
}
void test()
{
vector <cutie> v(n);
for (short int i = 0; i < n; i++)
{
in >> v[i].x >> v[i].y >> v[i].z;
}
sort(v.begin(), v.end(), cmp);
//vector < vector <short int>> aib(n + 1);
for (short int i = 0; i <= n; i++)
{
for (short int j = 0; j <= n; j++)
{
aib[i][j] = 0;
}
}
short int lg_max = 0;
for (short int i = 0; i < n; i++)
{
short int lg = interogare(v[i].y - 1, v[i].z - 1);
lg++;
lg_max = max(lg_max, lg);
actualizare(v[i].y, v[i].z, lg);
}
out << lg_max << "\n";
}
int main()
{
int t;
in >> n >> t;
for (int i = 0; i < t; i++)
{
test();
}
in.close();
out.close();
return 0;
}