Pagini recente » Cod sursa (job #2140254) | Cod sursa (job #368472) | Cod sursa (job #904027) | Cod sursa (job #546897) | Cod sursa (job #2620992)
#include <bits/stdc++.h>
std::ifstream fin ("cutii.in");
std::ofstream fout ("cutii.out");
struct Box{
int x, y, z;
};
bool sortZ (Box a, Box b){
return a.z < b.z;
}
class BIT_2D{
int **bit;
int size;
public:
BIT_2D (int Size){
size = Size;
bit = new int*[size];
for (int i=0; i<size; i++)
bit[i] = new int[size];
clear();
}
void clear (){
for (int i=0; i<size; i++)
for (int j=0; j<size; j++)
bit[i][j] = 0;
}
void update (int x, int y, int val){
int yy = y;
while (x < size){
y = yy;
while (y < size){
bit[x][y] = std::max (bit[x][y], val);
y = (y | (y+1));
}
x = (x | (x+1));
}
}
int query (int x, int y){
int yy = y, ans = 0;
while (x >= 0){
y = yy;
while (y >= 0){
ans = std::max (ans, bit[x][y]);
y = (y & (y+1)) - 1;
}
x = (x & (x+1)) - 1;
}
return ans;
}
int print (){
for (int i=0; i<size; i++, fout << '\n')
for (int j=0; j<size; j++)
fout << bit[i][j] << ' ';
fout << '\n';
}
};
int main()
{
int n, T, i;
fin >> n >> T;
while (T --){
struct Box boxes[n];
for (i=0; i<n; i++)
fin >> boxes[i].x >> boxes[i].y >> boxes[i].z;
std::sort (boxes, boxes+n, sortZ);
BIT_2D bit(n+1);
int ans = 0, crt;
for (i=0; i<n; i++){
crt = bit.query (boxes[i].x, boxes[i].y) + 1;
bit.update (boxes[i].x, boxes[i].y, crt);
//bit.print();
ans = std::max (ans, crt);
}
fout << ans << '\n';
}
return 0;
}