Pagini recente » Cod sursa (job #1686751) | Profil LordRobi1135 | Cod sursa (job #2093117) | Cod sursa (job #2099784) | Cod sursa (job #1781914)
#include <algorithm>
#include <fstream>
#include <tuple>
#include <vector>
#include <iostream>
using namespace std;
typedef tuple<int, int, int> Cutie;
typedef vector<vector<int>> AIB;
inline int PutereZerouri(int x)
{
return (x ^ (x - 1)) & x;
}
int GasesteMax(const AIB &aib, int x, int y)
{
int maxim = 0;
while (x > 0) {
int cy = y;
while (cy > 0) {
maxim = max(maxim, aib[x][cy]);
cy -= PutereZerouri(cy);
}
x -= PutereZerouri(x);
}
return maxim;
}
void Actualizeaza(AIB &aib, int x, int y, int val)
{
while (x < aib.size()) {
int cy = y;
while (cy < aib[0].size()) {
aib[x][cy] = max(aib[x][cy], val);
cy += PutereZerouri(cy);
}
x += PutereZerouri(x);
}
}
int main()
{
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n, t;
fin >> n >> t;
vector<Cutie> cutii(n);
AIB aib(n + 1, vector<int>(n + 1, 0));
while (t--) {
for (int i = 0; i < n; ++i)
fin >> get<0>(cutii[i]) >> get<1>(cutii[i]) >> get<2>(cutii[i]);
sort(cutii.begin(), cutii.end());
int maxim = 0;
for (auto &cutie : cutii) {
int lmax = GasesteMax(aib, get<1>(cutie) - 1, get<2>(cutie) - 1);
Actualizeaza(aib, get<1>(cutie), get<2>(cutie), lmax + 1);
maxim = max(maxim, lmax + 1);
}
fout << maxim << "\n";
if (t > 0) {
for (auto &linie : aib)
fill(linie.begin(), linie.end(), 0);
}
}
return 0;
}