Pagini recente » Cod sursa (job #2095369) | Cod sursa (job #2439702) | Cod sursa (job #2419951) | Cod sursa (job #1063456) | Cod sursa (job #616712)
Cod sursa(job #616712)
#include <fstream>
#include <algorithm>
using namespace std;
const int N=3501,inf=1<<30;
struct cutie{int x,y,z;} box[N],stack[N];
int v[N][N],a[N],n,rez,M,D;
bool lazy[N][2*N];
ifstream in("cutii.in");
ofstream out("cutii.out");
inline bool cmp(const cutie& a,const cutie& b)
{
return a.z<b.z;
}
inline int max(int a,int b)
{
return a>b ? a : b;
}
inline int pas(int x)
{
return x&-x;
}
inline int push(int x,int y)
{
stack[++D]=(cutie){x,y,0};
}
inline void pop(int& x,int& y)
{
x=stack[D].x;
y=stack[D].y;
D--;
}
void update(int x,int t)
{
for (;x<=n;x+=pas(x))
for (int y=t;y<=n;y+=pas(y))
{
v[x][y]=max(v[x][y],a[t]);
push(x,y);
}
}
int query(int x,int t)
{
rez=0;
for (;x;x-=pas(x))
for (int y=t;y;y-=pas(y))
{
rez=max(rez,v[x][y]);
push(x,y);
}
return rez;
}
void init()
{
int x,y;
while(D)
{
pop(x,y);
v[x][y]=0;
}
}
int main()
{
int t,i;
in>>n>>t;
while (t--)
{
init();
for (i=1;i<=n;i++)
in>>box[i].x>>box[i].y>>box[i].z;
sort(box+1,box+n+1,cmp);
for (i=1;i<=n;i++)
{
a[box[i].y]=1+query(box[i].x,box[i].y);
update(box[i].x,box[i].y);
}
M=a[1];
for (i=2;i<=n;i++)
if (M<a[i])
M=a[i];
out<<M<<"\n";
}
return 0;
}