Pagini recente » Cod sursa (job #2258213) | Cod sursa (job #2297817) | Cod sursa (job #1922060) | Cod sursa (job #2259060) | Cod sursa (job #2703793)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
class box {
public:
int x, y, z;
bool operator < (const box &A) const {
return z < A.z;
}
};
int N, T;
vector<vector<int>> aib;
void max_self(int &a, int b) {
a = max(a, b);
}
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)
max_self(aib[i][j], val);
}
int query(int x, int y) {
int ans = 0;
for(int i = x; i > 0; i -= i & -i)
for(int j = y; j > 0; j -= j & -j)
max_self(ans, aib[i][j]);
return ans;
}
void test_case() {
vector<box> a(N);
for(box &x : a)
fin >> x.x >> x.y >> x.z;
sort(a.begin(), a.end());
aib = vector<vector<int>>(N + 1, vector<int>(N + 1));
for(const box &x : a) {
int val = query(x.x, x.y) + 1;
update(x.x, x.y, val);
}
fout << query(N, N) << '\n';
}
int main() {
fin >> N >> T;
while(T--)
test_case();
}