Pagini recente » Cod sursa (job #569331) | Cod sursa (job #1884214) | Istoria paginii utilizator/adela-marin | Cod sursa (job #2816341) | Cod sursa (job #371384)
Cod sursa(job #371384)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream fi("cutii.in");
ofstream fo("cutii.out");
struct box{ int x,y,z,dyn; } boxes[3600];
int N,T,aib[3600][3600];
vector<int> Q;
inline bool cmp(const box &A,const box &B){ return A.x<B.x; }
inline int bit(int x){
return (x&(x-1))^x;
}
int query_aib(int i,int j){
int sum=0;
for (;i;i-=bit(i))
for (int y=j;y;y-=bit(y))
sum=max(sum,aib[i][y]);
return sum;
}
void update_aib(int i,int j,int s){
for (;i<=N;i+=bit(i))
for (int y=j;y<=N;y+=bit(y))
aib[i][y]=max(aib[i][y],s);
}
void test_case(){
memset(aib,0,sizeof(aib));
for (int i=1;i<=N;++i) fi>>boxes[i].x>>boxes[i].y>>boxes[i].z;
sort(boxes+1,boxes+N+1,cmp);
for (int i=1;i<=N;++i){
if (i>1 && boxes[i].x>boxes[i-1].x){
for (unsigned int j=0;j<Q.size();++j)
update_aib(boxes[Q[j]].y,boxes[Q[j]].x,boxes[Q[j]].dyn);
Q.clear();
}
boxes[i].dyn=query_aib(boxes[i].y-1,boxes[i].z-1)+1;
Q.push_back(i);
}
for (unsigned int i=0;i<Q.size();++i) update_aib(boxes[Q[i]].x,boxes[Q[i]].y,boxes[Q[i]].dyn);
Q.clear();
fo<<query_aib(N,N)<<"\n";
}
int main(){
fi>>N>>T;
for (int i=1;i<=T;++i) test_case();
fi.close();fo.close();
return 0;
}