Pagini recente » Cod sursa (job #1183664) | Cod sursa (job #3191350) | Cod sursa (job #1231306)
#include <fstream>
#include <algorithm>
#define DIM 3505
#define lsb(x) (x&(-x))
#define infile "cutii.in"
#define outfile "cutii.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
struct data {
int x;
int y;
int z;
} v[DIM];
bool cmp (const data &a, const data &b) {
return a.z < b.z;
}
int maxim, n, Max, t;
int A[DIM][DIM];
void query(int p, int q) {
for (int i=p; i>0; i-=lsb(i))
for (int j=q; j>0; j-=lsb(j))
maxim = std::max(A[i][j], maxim);
}
void update(int p, int q) {
for (int i=p; i<=n; i+=lsb(i))
for (int j=q; j<=n; j+=lsb(j))
A[i][j] = std::max(A[i][j], maxim);
}
int main () {
f >> n >> t;
for (; t; --t) {
for (int i=1; i<=n; ++i)
f >> v[i].x >> v[i].y >> v[i].z;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
A[i][j] = 0;
sort(v+1,v+n+1,cmp);
Max = 0;
for (int i=1; i<=n; ++i) {
maxim = 0;
query(v[i].x-1, v[i].y-1);
maxim++;
Max = std::max(Max, maxim);
update(v[i].x, v[i].y);
}
g << Max << "\n";
}
return 0;
}