Pagini recente » Cod sursa (job #1299092) | Cod sursa (job #3164749) | Cod sursa (job #865676) | Cod sursa (job #1451104) | Cod sursa (job #2348140)
#include <bits/stdc++.h>
struct box {
box (int x = 0, int y = 0, int z = 0) : x(x), y(y), z(z) {}
int x, y, z;
bool operator < (const box& other) const {
return z < other.z;
}
}; std::istream& operator >> (std::istream& stream, box& data) {
return stream >> data.x >> data.y >> data.z;
}
#define MAXN 3505
int N;
box Box[MAXN];
#define Zeros(X) X&(-X)
int Fenwick[MAXN][MAXN];
void Reset(int X, int Y, int Value = 0) {
for (int i=X, j; i<=N; i += Zeros(i))
for (j=Y; j<=N; j += Zeros(j))
Fenwick[i][j] = Value;
}
void Update(int X, int Y, int Value) {
for (int i=X, j; i<=N; i += Zeros(i))
for (j=Y; j<=N; j += Zeros(j))
Fenwick[i][j] = std::max(Fenwick[i][j], Value);
}
int Query(int X, int Y) {
int Ans = 0;
for (int i=X, j; i>=1; i -= Zeros(i))
for (j=Y; j>=1; j -= Zeros(j))
Ans = std::max(Ans, Fenwick[i][j]);
return Ans;
}
std::ifstream In ("cutii.in");
std::ofstream Out("cutii.out");
void Citire() {
for (int i=1; i<=N; ++i)
In >> Box[i];
}
void Rezolvare() {
std::sort (Box+1, Box+N+1);
for (int i=1; i<=N; ++i)
Reset(Box[i].x, Box[i].y);
int Ans = 0;
for (int i=1, Dyn; i<=N; ++i) {
Dyn = Query(Box[i].x, Box[i].y) + 1;
Update(Box[i].x, Box[i].y, Dyn);
Ans = std::max(Ans, Dyn);
} Out << Ans << '\n';
}
int main()
{
int T;
In >> N >> T;
while (T--) {
Citire();
Rezolvare();
}
return 0;
}