Pagini recente » Cod sursa (job #2730036) | Cod sursa (job #1409389) | Cod sursa (job #58489) | Cod sursa (job #2206429) | Cod sursa (job #3265814)
#include <bits/stdc++.h>
#define MAXN 3505
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n, t;
int aib[MAXN + 5][MAXN + 5];
struct cutie {
int x, y, z;
};
cutie v[MAXN];
bool compare(cutie a, cutie b) {
if (a.x == b.x) {
if (a.y == b.y) {
return a.z < b.z;
} else {
return a.y < b.y;
}
} else {
return a.x < b.x;
}
}
void update(int p1, int p2, int val) {
for (int i = p1; i <= MAXN; i += i & (-i)) {
for (int j = p2; j <= MAXN; j += j & (-j)) {
aib[i][j] = max(aib[i][j], val);
}
}
}
void reset(int p1, int p2) {
for (int i = p1; i <= MAXN; i += i & (-i)) {
for (int j = p2; j <= MAXN; j += j & (-j)) {
aib[i][j] = 0;
}
}
}
int query(int p1, int p2) {
int maxi = 0;
for (int i = p1; i > 0; i -= i & (-i)) {
for (int j = p2; j > 0; j -= j & (-j)) {
maxi = max(maxi, aib[i][j]);
}
}
return maxi;
}
int main() {
fin >> n >> t;
for (int test = 1; test <= t; ++test) {
for (int i = 1; i <= n; ++i) {
fin >> v[i].x >> v[i].y >> v[i].z;
}
sort(v + 1, v + n + 1, compare);
for (int i = 1; i <= n; ++i) {
int q = query(v[i].y - 1, v[i].z - 1);
update(v[i].y, v[i].z, q + 1);
}
fout << query(MAXN, MAXN) << '\n';
for (int i = 1; i <= n; ++i) {
reset(v[i].y, v[i].z);
}
}
return 0;
}