Pagini recente » Cod sursa (job #1574309) | Cod sursa (job #1366678) | Cod sursa (job #2105318) | Cod sursa (job #1948729) | Cod sursa (job #2528329)
#include <fstream>
#include <algorithm>
#define Nmax 3501
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,m,aib[Nmax][Nmax];
struct cutie{
int x,y,z;
}v[Nmax];
int cmp(cutie a,cutie b)
{
if (a.x!=b.x)
return a.x<b.x;
else
{
if (a.y!=b.y)
return a.y<b.y;
else
return a.z<b.z;
}
}
int suma(int poz1,int poz2)
{
int S=0;
for (int i=poz1;i>0;i-=(i&(-i)))
{
for (int j=poz2;j>0;j-=(j&(-j)))
{
S=max(aib[i][j],S);
}
}
return S;
}
void update(int poz1,int poz2,int val)
{
for (int i=poz1;i<=n;i+=(i&(-i)))
{
for (int j=poz2;j<=n;j+=(j&(-j)))
{
aib[i][j]=max(aib[i][j],val);
}
}
}
void eliminare(int poz1,int poz2)
{
for (int i=poz1;i<=n;i+=(i&(-i)))
{
for (int j=poz2;j<=n;j+=(j&(-j)))
{
aib[i][j]=0;
}
}
}
int main()
{
fin>>n>>m;
for (int i1=1;i1<=m;i1++)
{
int i;
for (i=1;i<=n;i++)
{
fin>>v[i].x>>v[i].y>>v[i].z;
}
sort (v+1,v+n+1,cmp);
for (i=1;i<=n;i++)
{
int q=suma(v[i].y-1,v[i].z-1)+1;
update (v[i].y,v[i].z,q);
}
fout<<suma(n,n)<<"\n";
for (i=1;i<=n;i++)
{
eliminare(v[i].y,v[i].z);
}
}
return 0;
}