Pagini recente » Cod sursa (job #533430) | Cod sursa (job #3131598) | Cod sursa (job #2479901) | Cod sursa (job #2327691) | Cod sursa (job #3030333)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n,m,test;
const int N=3505;
struct pct
{
int x,y,z;
}a[N];
int aib[N][N];
bool cmp(pct X,pct Y)
{
if(X.x==Y.x)
{
if(X.y==Y.y)
return X.z>Y.z;
return X.y>Y.y;
}
return X.x<Y.x;
}
int query_aib(int x,int y)
{
int rez=0;
for(int i=x;i;i-=(i&-i))
for(int j=y;j;j-=(j&-j))
rez=max(rez,aib[i][j]);
return rez;
}
void update_aib(int x,int y,int val)
{
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],val);
}
void erase_aib(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()
{
f>>n>>test;
while(test--)
{
for(int i=1;i<=n;i++)
{
f>>a[i].x>>a[i].y>>a[i].z;
}
sort(a+1,a+n+1,cmp);
int sol=0;
for(int i=1;i<=n;i++)
{
/// dimensiuni: x,y,z
int val= query_aib(a[i].y-1,a[i].z-1)+1;
update_aib(a[i].y,a[i].z,val);
sol=max(sol,val);
}
g<<sol<<'\n';
for(int i=1;i<=n;i++)
erase_aib(a[i].y,a[i].z);
}
return 0;
}