Pagini recente » Cod sursa (job #2140708) | Cod sursa (job #1528597) | Cod sursa (job #1187517) | Cod sursa (job #1067415) | Cod sursa (job #1071132)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
const int N = 3505;
int aib[N][N], sol, n, t;
pair <int, pair <int, int> > v[N];
void update (int x, int y, int s) {
for (int i = x; i <= n; i += (i & -i))
for (int j = y; j <= n; j += (j & -j))
aib[i][j] = max (aib[i][j], s);
}
void clear(int x, int y) {
for (int i = x; i <= n; i += (i & -i))
for (int j = y; j <= n; j += (j & - j))
aib[i][j] = 0;
}
int query (int x, int y) {
int sol = 0;
for (int i = x; i; i -= (i & -i))
for (int j = y; j; j -= (j & -j))
sol = max (sol, aib[i][j]);
return sol;
}
int main() {
fin >> n >> t;
while (t--) {
sol = 0;
for (int i = 1; i <= n; ++i)
fin >> v[i].first >> v[i].second.first >> v[i].second.second;
sort (v + 1, v + n + 1);
for (int i = 1; i <= n; ++i) {
int x = v[i].second.first, y = v[i].second.second;
int s = query (x - 1, y - 1) + 1;
sol = max (s, sol);
update (x, y, s);
}
for (int i = 1; i <= n; ++i)
clear(v[i].second.first, v[i].second.second);
fout << sol << "\n";
}
}