Pagini recente » Cod sursa (job #2500928) | Cod sursa (job #1276030) | Cod sursa (job #2867070) | Cod sursa (job #1570198) | Cod sursa (job #623664)
Cod sursa(job #623664)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define lbit(x) ((x&-x))
struct Cutie {
int x, y, z;
};
class Compare {
public:
bool operator ()(Cutie a, Cutie b) {
return a.z < b.z;
}
};
vector <vector <int> > vect_aib;
vector <Cutie> vect_cutii;
int query(int x, int y);
void update(int x, int y, int val);
int main(void) {
int n, m;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
Compare comparator = Compare();
fin >> n >> m;
vect_cutii.resize(n);
vect_aib.resize(n+1, vector <int> (n+1));
for(int i = 0; i < m; ++i) {
for(int j = 0; j < n; ++j)
fin >> vect_cutii[j].x >> vect_cutii[j].y >> vect_cutii[j].z;
vect_aib.assign(n+1, vector <int> (n+1, 0));
sort(vect_cutii.begin(), vect_cutii.end(), comparator);
int maxim = 0;
for(int j = 0; j < n; ++j) {
int prev_max = query(vect_cutii[j].x-1, vect_cutii[j].y-1);
update(vect_cutii[j].x, vect_cutii[j].y, prev_max+1);
maxim = max(maxim, prev_max);
}
fout << maxim + 1 << '\n';
}
fout.close();
fin.close();
}
int query(int x, int y) {
int maxim = 0;
for(int i = x; i > 0; i -= lbit(i))
for(int j = y; j > 0; j -= lbit(j))
maxim = max(maxim, vect_aib[i][j]);
return maxim;
}
void update(int x, int y, int val) {
for(int i = x; i < vect_aib.size(); i += lbit(i))
for(int j = y; j < vect_aib.size(); j += lbit(j))
vect_aib[i][j] = max(val, vect_aib[i][j]);
}