Pagini recente » Cod sursa (job #1663532) | Cod sursa (job #1507134) | Cod sursa (job #951089) | Cod sursa (job #1661775) | Cod sursa (job #945076)
Cod sursa(job #945076)
#include<fstream>
#include<algorithm>
using namespace std;
class box{
public:
int x, y, z;
box(){};
box(int x1, int y1, int z1){
x = x1;
y = y1;
z = z1;
}
};
int cmp(box a, box b){
return a.x < b.x;
}
int n, aib[3505][3505];
inline int lsb(int &x){
return x & -x;
}
void update(int x, int y, int val){
for(int i = x; i <= n; i += lsb(i))
for(int j = y; j <= n; j += lsb(j))
aib[i][j] = max(aib[i][j], val);
}
void update0(int x, int y){
for(int i = x; i <= n; i += lsb(i))
for(int j = y; j <= n; j += lsb(j))
aib[i][j] = 0;
}
int query(int x, int y){
int vl = 0;
for(int i = x; i > 0; i -= lsb(i))
for(int j = y; j > 0; j -= lsb(j))
vl = max(vl, aib[i][j]);
return vl;
}
box gv[3505];
int main(){
ifstream in("cutii.in");
ofstream out("cutii.out");
int tests;
in >> n;
in >> tests;
while(tests--){
int ans = 0;
for(int i = 1; i <= n; ++i)
in >> gv[i].x >> gv[i].y >> gv[i].z;
sort(gv + 1, gv + n + 1, cmp);
for(int i = 1; i <= n; ++i){
int pans = query(gv[i].y - 1, gv[i].z - 1) + 1;
update(gv[i].y, gv[i].x, pans);
ans = max(ans , pans);
}
out << ans << "\n";
for(int i = 1; i <= n; ++i)
update0(gv[i].y, gv[i].x);
}
return 0;
}