Pagini recente » Cod sursa (job #118275) | Cod sursa (job #1753613) | Borderou de evaluare (job #1787029) | Cod sursa (job #1431782) | Cod sursa (job #479210)
Cod sursa(job #479210)
#include<cstdio>
#include<string.h>
#include<algorithm>
#define dim 8192
using namespace std;
int n,t,a[3505][3505],pz;
char c[dim+8];
struct nod
{
int x,y,z;
}cut[3505];
inline void cit(int &x)
{
x=0;
while(c[pz]<'0'||c[pz]>'9')
if(++pz==dim) fread(c,1,dim,stdin),pz=0;
while(c[pz]>='0'&&c[pz]<='9')
{
x=x*10+c[pz]-'0';
if(++pz==dim) fread(c,1,dim,stdin),pz=0;
}
}
bool comp(nod a,nod b)
{
return a.z<b.z;
}
void update(int x,int y,int val)
{
for(;x<=n;x+=(x&-x))
for(;y<=n;y+=(y&-y))
if(a[x][y]<val) a[x][y]=val;
}
int query(int x,int y)
{
int val=0;
for(;x>0;x-=(x&-x))
for(;y>0;y-=(y&-y))
if(a[x][y]>val) val=a[x][y];
return val;
}
void rez()
{
int i,dp=0,ma=0;
for(i=1;i<=n;++i)
{
// cit(cut[i].x);
scanf("%d%d%d",&cut[i].x,&cut[i].y,&cut[i].z);
//cit(cut[i].y);
//cit(cut[i].z);
}
sort(cut+1,cut+n+1,comp);
for(i=1;i<=n;++i)
{
dp=1+query(cut[i].x-1,cut[i].y-1);
update(cut[i].x,cut[i].y,dp);
if(dp>ma) ma=dp;
}
printf("%d\n",ma);
for(i=1;i<=n;++i)
{
int x=cut[i].x;
int y=cut[i].y;
for(;x<=n;x+=(x&-x))
for(;y<=n;y+=(y&-y))
a[x][y]=0;
}
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
//cit(n);
scanf("%d%d",&n,&t);
//cit(t);
for(int i=1;i<=t;++i)
rez();
fclose(stdin);
fclose(stdout);
return 0;
}