Pagini recente » Cod sursa (job #3229780) | Cod sursa (job #1444648) | Cod sursa (job #1169673) | Cod sursa (job #2075864) | Cod sursa (job #1274989)
#include<cstdio>
#include<vector>
#define bit(x) ((x)&(-x))
#include<algorithm>
#include<cmath>
using namespace std;
pair<int,pair<int,int> > c[3501];
int crt,mx,x,y,z,i,j,k,n,t,aib[3501][3501];
int max(int x,int y)
{
if(x>y)
{
return x;
}
return y;
}
void update(pair<int,int> x,int valeur)
{
for(x.first=x.first;x.first<=n;x.first+=bit(x.first))
{
for(int j=x.second;j<=n;j+=bit(j))
{
aib[x.first][j]=max(aib[x.first][j],valeur);
}
}
}
void erase(pair<int,int> x)
{
for(x.first=x.first;x.first<=n;x.first+=bit(x.first))
{
for(int j=x.second;j<=n;j+=bit(j))
{
aib[x.first][j]=0;
}
}
}
int q(pair<int,int> x)
{
int ans=0;
for(x.first=x.first;x.first>0;x.first-=bit(x.first))
{
for(int j=x.second;j>0;j-=bit(j))
{
ans=max(ans,aib[x.first][j]);
}
}
return ans;
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
scanf("%d%d",&n,&t);
for(i=1;i<=t;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d%d%d",&x,&y,&z);
c[j]=make_pair(x,make_pair(y,z));
}
sort(c+1,c+n+1);
mx=0;
for(k=1;k<=n;k++)
{
crt=q(c[k].second);
update(c[k].second,crt+1);
mx=max(crt+1,mx);
}
for(j=1;j<=n;j++)
{
erase(c[j].second);
}
printf("%d\n",mx);
}
return 0;
}