Pagini recente » Cod sursa (job #2285617) | Cod sursa (job #999527) | Cod sursa (job #360790) | Cod sursa (job #1311627) | Cod sursa (job #1537342)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#define FILEIN "cutii.in"
#define FILEOUT "cutii.out"
#define NMAX 3505
using namespace std;
struct P {
int x;
int y;
int z;
bool operator<(const struct P& other) const {
return x < other.x;
}
};
struct P V[NMAX];
int D[NMAX][NMAX];
int n, t;
void update(int x, int y, int v) {
while (x <= n) {
int y1 = y;
while (y1 <= n) {
D[x][y1] = max(D[x][y1], v);
y1 += (y1 & -y1);
}
x += (x & -x);
}
}
int query(int x, int y) {
int ans = 0;
while (x) {
int y1 = y;
while (y1) {
ans = max(ans, D[x][y1]);
y1 -= (y1 & -y1);
}
x -= (x & -x);
}
return ans;
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
cin.sync_with_stdio(0);
cin >> n >> t;
while (t--) {
memset(D, 0, sizeof(D));
memset(V, 0, sizeof(V));
for (int i = 1; i <= n; i++) {
cin >> V[i].x >> V[i].y >> V[i].z;
}
sort(V+1, V+n+1);
int ans = 0;
for (int i = 1; i <= n; i++) {
int q;
ans = max(ans, q = query(V[i].y, V[i].z) + 1);
update(V[i].y, V[i].z, q);
}
cout << ans << '\n';
}
return 0;
}