Pagini recente » Cod sursa (job #1256399) | Cod sursa (job #1571066) | Cod sursa (job #3262868) | Cod sursa (job #275198) | Cod sursa (job #2055075)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("cutii.in");
ofstream fo("cutii.out");
typedef struct box{int x,y,z;} BOX;
int n,i,t,T,F[3501][3501],rez,val;
BOX A[3501];
bool cmp(BOX a, BOX b)
{
return a.x<b.x;
}
void update(int x, int y, int val)
{
int y1;
while(x<=n)
{
y1=y;
while(y1<=n)
{
F[x][y1]=max(F[x][y1],val);
y1=y1+(y1&(y1^(y1-1)));
}
x=x+(x&(x^(x-1)));
}
}
int query(int x, int y)
{
int rez=0,y1;
while(x>=1)
{
y1=y;
while(y1>=1)
{
rez=max(rez,F[x][y1]);
y1=y1-(y1&(y1^(y1-1)));
}
x=x-(x&(x^(x-1)));
}
return rez;
}
void del(int x, int y)
{
int y1;
while(x<=n)
{
y1=y;
while(y1<=n)
{
F[x][y1]=0;
y1=y1+(y1&(y1^(y1-1)));
}
x=x+(x&(x^(x-1)));
}
}
int main()
{
fi>>n>>T;
for(t=1; t<=T; t++)
{
rez=0;
for(i=1; i<=n; i++)
fi>>A[i].x>>A[i].y>>A[i].z;
sort(A+1,A+n+1,cmp);
//acum x-urile sunt in ordine crescatoare, deci trb sa verif doar y si z
for(i=1; i<=n; i++)
{
val=query(A[i].y,A[i].z)+1;
update(A[i].y,A[i].z,val);
rez=max(rez,val);
}
fo<<rez<<"\n";
for(i=1; i<=n; i++)
del(A[i].y,A[i].z);
}
fi.close();
fo.close();
return 0;
}