Pagini recente » Istoria paginii runda/simulare-oni-2014/clasament | Cod sursa (job #2140397) | Cod sursa (job #1087440) | Cod sursa (job #1556541) | Cod sursa (job #479216)
Cod sursa(job #479216)
#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(int i=y;i<=n;i+=(i&-i))
if(a[x][i]<val) a[x][i]=val;
}
int query(int x,int y)
{
int val=0;
for(;x>0;x-=(x&-x))
for(int i=y ;i>0;i-=(i&-i))
if(a[x][i]>val) val=a[x][i];
return val;
}
void rez()
{
int i,dp=0,ma=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=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(int j=y;j<=n;j+=(j&-j))
a[x][j]=0;
}
}
int main()
{
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
cit(n);
cit(t);
for(int i=1;i<=t;++i)
rez();
fclose(stdin);
fclose(stdout);
return 0;
}