Pagini recente » Cod sursa (job #1871703) | Borderou de evaluare (job #1638963) | Borderou de evaluare (job #2034362) | Borderou de evaluare (job #1909501) | Cod sursa (job #1800181)
#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) const
{
return (c<aux.c);
}
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<=n;i+=diferenta(i))
for(int j=b;j<=n;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].a-1,v[j].b-1)+1;
//cout<<v[j].a<<" "<<v[j].b<<" "<<v[j].c<<"\n";
update(v[j].a,v[j].b,aux);
maxim=max(maxim,aux);
}
for(j=1;j<=n;j++) initializare(v[j].a,v[j].b);
//cout<<"maxim: "<<maxim<<"\n";
fout<<maxim<<"\n";
}
}