Pagini recente » Cod sursa (job #1069045) | Cod sursa (job #2076146) | Cod sursa (job #1319554) | Cod sursa (job #1843945) | Cod sursa (job #632556)
Cod sursa(job #632556)
#include <fstream>
#include <algorithm>
using namespace std;
const char InFile[]="cutii.in";
const char OutFile[]="cutii.out";
const int MaxN=4096;
ifstream fin(InFile);
ofstream fout(OutFile);
struct Cutie
{
int X,Y,Z;
};
struct Cutie_cmp
{
inline bool operator() (const Cutie &a, const Cutie &b)
{
return a.Z<b.Z;
}
};
int N,T,sol,AIB2D[MaxN][MaxN];
Cutie c[MaxN];
inline int LSB(const int &x)
{
return x&(-x);
}
inline int AIB2DQuery(const int &x, const int &y)
{
int sol=0;
for(register int i=x;i>0;i-=LSB(i))
{
for(register int j=y;j>0;j-=LSB(j))
{
sol=max(AIB2D[i][j],sol);
}
}
return sol;
}
inline void AIB2DUpdate(const int &x, const int &y, const int &val)
{
for(register int i=x;i<=N;i+=LSB(i))
{
for(register int j=y;j<=N;j+=LSB(j))
{
AIB2D[i][j]=max(AIB2D[i][j],val);
}
}
}
inline void AIB2DSet0(const int &x, const int &y)
{
for(register int i=x;i<=N;i+=LSB(i))
{
for(register int j=y;j<=N;j+=LSB(j))
{
AIB2D[i][j]=0;
}
}
}
int main()
{
fin>>N>>T;
for(;T;--T)
{
sol=0;
for(register int i=1;i<=N;++i)
{
fin>>c[i].X>>c[i].Y>>c[i].Z;
}
sort(c+1,c+1+N,Cutie_cmp());
for(register int i=1;i<=N;++i)
{
int best=1+AIB2DQuery(c[i].X-1,c[i].Y-1);
sol=max(sol,best);
AIB2DUpdate(c[i].X,c[i].Y,best);
}
for(register int i=1;i<=N;++i)
{
AIB2DSet0(c[i].X,c[i].Y);
}
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}