Pagini recente » Cod sursa (job #2180941) | Cod sursa (job #337964) | Cod sursa (job #2113944) | Cod sursa (job #1409846) | Cod sursa (job #1231337)
#include<bits/stdc++.h>
using namespace std;
struct cell
{
int x,y,z;
};
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int NMAX=3505;
int n,t,AIB[NMAX][NMAX];
cell a[NMAX];
inline int zeros(int x)
{
return x^(x&(x-1));
}
inline void UPDATE1(int x,int y,int val)
{
int i,j;
for (i=x;i<=n;i+=zeros(i))
for (j=y;j<=n;j+=zeros(j))
AIB[i][j]=max(AIB[i][j],val);
};
inline void UPDATE0(int x,int y)
{
int i,j;
for (i=x;i<=n;i+=zeros(i))
for (j=y;j<=n;j+=zeros(j))
AIB[i][j]=0;
}
inline int QUERY(int x,int y)
{
int i,j,rez=0;
for (i=x;i>=1;i-=zeros(i))
for (j=y;j>=1;j-=zeros(j))
rez=max(rez,AIB[i][j]);
return rez;
}
inline bool cmp(const cell A,const cell B)
{
if (A.x==B.x)
{
if (A.y==B.y) return A.z<B.z;
return A.y<B.y;
}
return A.x<B.x;
}
int main()
{
int i,maxim,aux;
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++)
{
aux=1+QUERY(a[i].y-1,a[i].z-1);
maxim=max(maxim,aux);
UPDATE1(a[i].y,a[i].z,aux);
}
for (i=1;i<=n;i++) UPDATE0(a[i].y,a[i].z);
fout<<maxim<<"\n";
}
return 0;
}