Pagini recente » Cod sursa (job #908186) | Cod sursa (job #1958919) | Cod sursa (job #1194391) | Cod sursa (job #2161355) | Cod sursa (job #2325007)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#define nmx 3505
#define zero(x) x&-x
#define sh short
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
sh n,i,j,t,nr,rez;
sh aib[nmx][nmx],r[nmx];
struct per
{
sh x,y,z;
bool operator<(const per &alt)const
{ return z<alt.z; }
} v[nmx];
void clean(sh x,sh y)
{
sh i,j;
for(i=x;i<=n;i+=i&-i)
for(j=y;j<=n;j+=j&-j)
aib[i][j]=0;
}
void add(sh x,sh y,sh id)
{
int i,j;
for(i=x;i<=n;i+=i&-i)
for(j=y;j<=n;j+=j&-j)
if(r[aib[i][j]]<r[id])
aib[i][j]=id;
}
sh query(sh x,sh y)
{
sh i,j,mx=0;
for(i=x;i>0;i-=i&-i)
for(j=y;j>0;j-=j&-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);
}
}