Pagini recente » Cod sursa (job #716116) | Cod sursa (job #1402190) | Cod sursa (job #136077) | Cod sursa (job #280659) | Cod sursa (job #2891722)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
int n, t;
struct paralel {
int x, y, z;
};
bool cmp(paralel a, paralel b) {
if (a.x != b.x) {
return a.x < b.x;
}
else if (a.y != b.y) {
return a.y < b.y;
}
return a.z < b.z;
}
paralel c[3502];
int aib[3502][3502];
void update(int x, int y, int val) {
for (; x <= n; x += (x & -x)) {
for (int yy = y; yy <= n; yy += (yy & -yy)) {
aib[x][yy] = max(aib[x][yy], val);
}
}
}
int query(int x, int y) {
int ans = 0;
for (; x > 0; x -= (x & -x)) {
for (int yy = y; yy > 0; yy -= (yy & -yy)) {
ans = max(ans, aib[x][yy]);
}
}
return ans;
}
void clear(int x, int y) {
for (; x <= n; x += (x & -x)) {
for (int yy = y; yy <= n; yy += (yy & -yy)) {
aib[x][yy] = 0;
}
}
}
int main() {
cin >> n >> t;
for (int z = 1; z <= t; z++) {
for (int i = 1; i <= n; i++) {
cin >> c[i].x >> c[i].y >> c[i].z;
}
sort(c + 1, c + n + 1, cmp);
int bst = 0;
for (int i = 1; i <= n; i++) {
bst = query(c[i].y, c[i].z) + 1;
update(c[i].y, c[i].z, bst);
}
cout << query(n, n) << '\n';
for (int i = 1; i <= n; i++) {
clear(c[i].y, c[i].z);
}
}
}