Pagini recente » Cod sursa (job #569506) | Cod sursa (job #2787363) | Cod sursa (job #3290399) | Cod sursa (job #2429889) | Cod sursa (job #2333465)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
const int N=3500+7;
int n,t;
struct kek
{
int a;
int b;
int c;
};
bool cmp(kek a,kek b)
{
return a.c<b.c;
}
kek v[N];
int fen[N][N];
void upd(int x,int y,int val)
{
for(int i=x;i<=n;i+=i&(-i))
{
for(int j=y;j<=n;j+=j&(-j))
{
fen[i][j]=max(fen[i][j],val);
}
}
}
int ask(int x,int y)
{
int res=0;
for(int i=x;i>=1;i-=i&(-i))
{
for(int j=y;j>=1;j-=j&(-j))
{
res=max(res,fen[i][j]);
}
}
return res;
}
void clr(int x,int y)
{
for(int i=x;i<=n;i+=i&(-i))
{
for(int j=y;j<=n;j+=j&(-j))
{
fen[i][j]=0;
}
}
}
int main()
{
cin>>n>>t;
while(t--)
{
for(int i=1;i<=n;i++)
{
cin>>v[i].a>>v[i].b>>v[i].c;
}
sort(v+1,v+n+1,cmp);
int res=0;
for(int i=1;i<=n;i++)
{
int cur=ask(v[i].a,v[i].b)+1;
if(cur>res)
{
res=cur;
}
upd(v[i].a,v[i].b,cur);
}
for(int i=1;i<=n;i++)
{
clr(v[i].a,v[i].b);
}
cout<<res<<"\n";
}
}
/**
**/