Pagini recente » Cod sursa (job #1099905) | Cod sursa (job #1024709) | Cod sursa (job #511911) | Cod sursa (job #1496823) | Cod sursa (job #1800145)
#include<algorithm>
#include<iostream>
#include<fstream>
#define DN 3505
#define SH short
using namespace std;
fstream fin("cutii.in",ios::in),fout("cutii.out",ios::out);
short x[DN][DN],n,t;
struct cutie
{
public:
bool operator < (const cutie& aux)
{
if(a==aux.a)
{
if(b==aux.b) return (c>aux.c);
return (b>aux.b);
}
else
return (a<aux.a);
}
SH a,b,c;
};
cutie v[DN];
SH diferenta(SH val){
return val-(val&(val-1));
}
SH query(SH a,SH b)
{
SH i,j,minim=0;
for(i=a;i>0;i-=diferenta(i))
for(j=b;j>0;j-=diferenta(j))
minim=max(minim,x[i][j]);
return minim;
}
void update(SH a,SH b,SH val)
{
SH i,j;
for(int i=a;i<100;i+=diferenta(i))
for(int j=b;j<100;j+=diferenta(j))
x[i][j]=max(x[i][j],val);
}
void initializare(SH a,SH b)
{
for(int i=a;i<=n;i+=diferenta(i))
for(int j=b;j<=n;j+=diferenta(j))
x[i][j]=0;
}
int main()
{
SH a,b,c,i,j,aux,maxim=0;
fin>>n>>t;
for(i=1;i<=t;i++)
{
maxim=0;
for(j=1;j<=n;j++)
{
fin>>a>>b>>c;
v[j]={a,b,c};
}
sort(v+1,v+n+1);
//cout<<"--------------------\n";
for(j=1;j<=n;j++)
{
aux=query(v[j].b,v[j].c)+1;
//cout<<v[j].a<<" "<<v[j].b<<" "<<v[j].c<<"\n";
update(v[j].b,v[j].c,aux);
maxim=max(maxim,aux);
}
for(j=1;j<=n;j++) initializare(v[j].b,v[j].c);
//cout<<"maxim: "<<maxim<<"\n";
fout<<maxim<<"\n";
}
}