Pagini recente » Cod sursa (job #1468034) | Cod sursa (job #1374049) | Cod sursa (job #1380052) | Cod sursa (job #2254538) | Cod sursa (job #856984)
Cod sursa(job #856984)
#include <fstream>
#include <algorithm>
#define Nmax 3600
#define max(a,b) ((b)==0?(b):((a)>(b)?(a):(b)))
#define LSB(x) (x&-x)
using namespace std;
struct box{int X,Y,Z;}Box[Nmax];
int T,N,Sol,AIB[Nmax][Nmax];
void Update(int X,int Y,int Val) {
int i,j;
for(i=X;i<=N;i+=LSB(i))
for(j=Y;j<=N;j+=LSB(j))
AIB[i][j]=max(AIB[i][j],Val);
}
int Query(int X,int Y) {
int i,j,Res=0;
for(i=X;i>0;i-=LSB(i))
for(j=Y;j>0;j-=LSB(j))
Res=max(Res,AIB[i][j]);
return Res;
}
bool cmp(box A,box B) {
return A.X<B.X;
}
void Solve() {
int i,Res;
Sol=0;
sort(Box+1,Box+N+1,cmp);
for(i=1;i<=N;i++) {
Res=Query(Box[i].Y-1,Box[i].Z-1)+1;
Update(Box[i].Y,Box[i].Z,Res);
Sol=max(Sol,Res);
}
for(i=1;i<=N;i++)
Update(Box[i].Y,Box[i].Z,0);
}
void Read(ifstream & in) {
for(int i=1;i<=N;i++)
in>>Box[i].X>>Box[i].Y>>Box[i].Z;
}
void Write(ofstream & out) {
out<<Sol<<'\n';
}
int main() {
ifstream in("cutii.in");
ofstream out("cutii.out");
in>>N>>T;
while(T--) {
Read(in);
Solve();
Write(out);
}
in.close();
out.close();
return 0;
}