Pagini recente » Cod sursa (job #1824125) | Cod sursa (job #1390515) | Cod sursa (job #718917) | Cod sursa (job #882042) | Cod sursa (job #3144632)
#include <bits/stdc++.h>
#define ub(x) (x & -x)
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie {
int x, y, z;
} c[3502];
int n, t, i, d[3502];
int a[3502][3502], r;
static inline bool cmp(cutie a, cutie b){
return (a.x < b.x);
}
static inline void update(int pi, int pj, int val) {
for(int i = pi; i < 3501; i += ub(i)) {
for(int j = pj; j < 3501; j += ub(j)) {
a[i][j] = max(a[i][j], val);
if(val == -1) a[i][j] = 0;
}
}
}
static inline int query(int pi, int pj) {
int r = 0;
for(int i = pi; i > 0; i -= ub(i)) {
for(int j = pj; j > 0; j -= ub(j)) {
r = max(a[i][j], r);
}
}
return r;
}
int main() {
fin >> n >> t;
while(t--) {
for(i = 1; i <= n; i++) fin >> c[i].x >> c[i].y >> c[i].z;
sort(c + 1, c + n + 1, cmp);
r = 0;
for(i = 1; i <= n; i++) {
int t = query(c[i].y - 1, c[i].z - 1);
d[i] = t + 1;
if(d[i] > r) r = d[i];
update(c[i].y, c[i].z, d[i]);
}
fout << r << "\n";
for(i = 1; i <= n; i++) update(c[i].y, c[i].z, -1);
}
return 0;
}