Pagini recente » Cod sursa (job #2716051) | Cod sursa (job #2448368) | Cod sursa (job #2661230) | Cod sursa (job #2982100) | Cod sursa (job #3183419)
#include <bits/stdc++.h>
const int NMAX = 3500;
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n, t;
struct paralelipiped {
int x, y, z;
};
vector<paralelipiped> v;
short aib2d[NMAX + 1][NMAX + 1], ans;
bool cmp(paralelipiped A, paralelipiped B) {
return(A.z < B.z);
}
void update(int x, int y, int val) {
for ( int i = x; i <= n; i += (i & (-i)) ) {
for ( int j = y; j <= n; j += (j & (-j)) ) {
aib2d[i][j] = (val > aib2d[i][j] ? val : aib2d[i][j]);
}
}
}
short query(int x, int y) {
short ans = 0;
for ( int i = x; i > 0; i -= (i & (-i)) ) {
for ( int j = y; j > 0; j -= (j & (-j)) ) {
if ( aib2d[i][j] > ans )
ans = aib2d[i][j];
}
}
return ans;
}
void clean(int x, int y) {
for ( int i = x; i <= n; i += (i & (-i)) ) {
for ( int j = y; j <= n; j += (j & (-j)) ) {
aib2d[i][j] = 0;
}
}
}
int main() {
fin >> n >> t;
for ( ; t; t-- ) {
for ( int i = 1; i <= n; i++ ) {
int x, y, z;
fin >> x >> y >> z;
v.push_back({x, y, z});
}
sort(v.begin(), v.end(), cmp);
for ( auto a : v ) {
int dp = 1 + query(a.x, a.y);
if ( dp > ans )
ans = dp;
update(a.x, a.y, dp);
}
fout << ans << "\n";
ans = 0;
for ( auto a : v ) {
clean(a.x, a.y);
}
v.clear();
}
return 0;
}