Pagini recente » Cod sursa (job #650280) | Cod sursa (job #233328) | Cod sursa (job #2946444) | Cod sursa (job #569374) | Cod sursa (job #3320337)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
int n;
int aib[3505][3505];
struct idx
{
int x,y,z;
}T[3505];
bool cmp(idx a,idx b)
{
return a.z<b.z || (a.z==b.z && a.y<b.y)
||(a.z==b.z && a.y==b.y && a.x<b.x);
}
void update(int x,int y,int v)
{
for(int i=x;i<=n;i+=i&-i)
for(int j=y;j<=n;j+=j&-j)
aib[i][j]=max(aib[i][j],v);
}
int query(int x,int y)
{
int ans=0;
for(int i=x;i>=1;i-=i&-i)
for(int j=y;j>=1;j-=j&-j)
ans=max(ans,aib[i][j]);
return ans;
}
void res(int x,int y)
{
for(int i=x;i<=n;i+=i&-i)
for(int j=y;j<=n;j+=j&-j)
aib[i][j]=0;
}
int main()
{
int test;
cin>>n>>test;
while(test--)
{
int ans=0;
for(int i=1;i<=n;i++)
cin>>T[i].x>>T[i].y>>T[i].z;
sort(T+1,T+n+1,cmp);
for(int i=1;i<=n;i++)
{
int x=T[i].x;
int y=T[i].y;
int cmax=1;
cmax+=query(x-1,y-1);
update(x,y,cmax);
ans=max(ans,cmax);
}
cout<<ans<<"\n";
for(int i=1;i<=n;i++)
res(T[i].x,T[i].y);
}
return 0;
}