Pagini recente » Cod sursa (job #1734732) | Cod sursa (job #807715) | Cod sursa (job #1755770) | Istoria paginii runda/casi | Cod sursa (job #732298)
Cod sursa(job #732298)
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,T,aib[3550][3550];
struct Cutie{int x,y,z;};
Cutie A[3550];
inline bool Sortare(Cutie A,Cutie B)
{
return A.x<B.x;
}
inline int Bit(int x)
{
return x & -x;
}
inline int Query(int x,int y)
{
int i,j,rez=0;
for(i=x;i>0;i-=Bit(i))
for(j=y;j>0;j-=Bit(j))
rez=max(rez,aib[i][j]);
return rez;
}
inline void Update(int x,int y,int val)
{
int i,j;
for(i=x;i<=n;i+=Bit(i))
for(j=y;j<=n;j+=Bit(j))
aib[i][j]=max(aib[i][j],val);
}
inline void Memset_Aib(int x,int y)
{
int i,j;
for(i=x;i<=n;i+=Bit(i))
for(j=y;j<=n;j+=Bit(j))
aib[i][j]=0;
}
inline int Rezolvare()
{
sort(A+1,A+n+1,Sortare);
int i,best=0,val;
for(i=1;i<=n;i++)
{
val=1+Query(A[i].y-1,A[i].z-1);
Update(A[i].y,A[i].z,val);
best=max(best,val);
}
for(i=1;i<=n;i++)
Memset_Aib(A[i].y,A[i].z);
return best;
}
int main()
{
int t,i;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
fin>>n>>T;
for(t=0;t<T;t++)
{
for(i=1;i<=n;i++)
fin>>A[i].x>>A[i].y>>A[i].z;
fout<<Rezolvare()<<"\n";
}
fin.close();
fout.close();
return 0;
}