Pagini recente » Istoria paginii runda/cihcahul01 | Cod sursa (job #1794537) | Cod sursa (job #2439358) | Cod sursa (job #1748441) | Cod sursa (job #732300)
Cod sursa(job #732300)
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,T,aib[3550][3550],bit[3550];
struct Cutie{int x,y,z;};
Cutie A[3550];
inline void Precalculare_Biti_Terminali()
{
int i;
for(i=1;i<=n;i++)
bit[i]=(i & -i);
}
inline int Max(int a,int b)
{
if(a<b)
return b;
return a;
}
inline bool Sortare(Cutie A,Cutie B)
{
return A.x<B.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;
Precalculare_Biti_Terminali();
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;
}