Pagini recente » Cod sursa (job #1346562) | Cod sursa (job #326389) | Cod sursa (job #3127999) | Cod sursa (job #2871186) | Cod sursa (job #479198)
Cod sursa(job #479198)
#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.x<b.x;
}
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;
}
void pune (int x,int y,int val)
{
for(int i=x;i<=n;i+=(i&-i))
for(int j=y;j<=n;j+=(j&-j))
a[i][j]=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 k)
{
int i,dp[3505],ma=0;
memset(dp,0,sizeof(dp));
if(k>1) for(i=1;i<=n;++i)
pune(cut[i].y,cut[i].z,0);
for(i=1;i<=n;++i)
{
cit(cut[i].x);
cit(cut[i].y);
cit(cut[i].z);
}
sort(cut+1,cut+n+1,comp);
for(i=1;i<=n;++i)
{
dp[i]=1+query(cut[i].y-1,cut[i].z-1);
update(cut[i].y,cut[i].z,dp[i]);
if(dp[i]>ma) ma=dp[i];
}
printf("%d\n",ma);
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
cit(n);
cit(t);
for(int i=1;i<=t;++i)
rez(i);
fclose(stdin);
fclose(stdout);
return 0;
}