Pagini recente » Cod sursa (job #81689) | Cod sursa (job #2831938) | Cod sursa (job #704675) | Cod sursa (job #739503) | Cod sursa (job #1164946)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
#define MAX 3500
struct box{int x, y, z;} a[MAX];
inline bool cmp(box a, box b){return a.x<b.x;}
short int nr, n, t, maxim;
short int AIB[MAX][MAX];
char modif[MAX][MAX];
short int cauta(int x, int y)
{
int i, j;
short int m=0;
for(i=x;i;i-=(i&(-i)))
{
for(j=y;j;j-=(j&(-j)))
{
if(modif[i][j]==t)
m=max(m, AIB[i][j]);
}
}
return m;
}
void introdu(int x, int y)
{
int i, j;
for(i=x;i<=n;i+=(i&(-i)))
{
for(j=y;j<=n;j+=(j&(-j)))
{
if(modif[i][j]==t)
AIB[i][j]=max(AIB[i][j], nr);
else
{
modif[i][j]=t;
AIB[i][j]=nr;
}
}
}
}
int main()
{
int i;
fin>>n>>t;
while(t--)
{
for(i=1;i<=n;i++)
fin>>a[i].x>>a[i].y>>a[i].z;
sort(a+1, a+n+1, cmp);
maxim=0;
for(i=1;i<=n;i++)
{
nr=cauta(a[i].y, a[i].z)+1;
introdu(a[i].y, a[i].z);
maxim=max(maxim, nr);
}
fout<<maxim<<"\n";
}
}