Pagini recente » Cod sursa (job #3213330) | Cod sursa (job #2686184) | Cod sursa (job #311224) | Cod sursa (job #375028) | Cod sursa (job #2325002)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#define nmx 3505
#define zero(x) x&-x
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,i,j,t,nr,rez;
int aib[nmx][nmx],r[nmx];
struct per
{
int x,y,z;
bool operator<(const per &alt)const
{ return z<alt.x; }
} v[nmx];
void clean(int x,int y)
{
int i,j;
for(i=x;i<=n;i+=zero(i))
for(j=y;j<=n;j+=zero(j))
aib[i][j]=0;
}
void add(int x,int y,int id)
{
int i,j;
for(i=x;i<=n;i+=zero(i))
for(j=y;j<=n;j+=zero(j))
if(r[aib[i][j]]<r[id])
aib[i][j]=id;
}
int query(int x,int y)
{
int i,j,mx=0;
for(i=x;i>0;i-=zero(i))
for(j=y;j>0;j-=zero(j))
if(r[aib[i][j]]>r[mx])
mx=aib[i][j];
return r[mx];
}
int main() {
fin>>n>>t;
while(t--)
{
for(i=1;i<=n;i++)
fin>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1);
memset(r,0,sizeof(r));
rez=0;
for(i=1;i<=n;i++)
{
r[i]=query(v[i].x,v[i].y)+1;
add(v[i].x, v[i].y, i);
rez=max(rez,r[i]);
}
fout<<rez<<"\n";
for(i=1;i<=n;i++)
clean(v[i].x, v[i].y);
}
}