Pagini recente » Cod sursa (job #795590) | Cod sursa (job #2714844) | Cod sursa (job #2225247) | Cod sursa (job #2078098) | Cod sursa (job #2046296)
#include <cstdio>
#include <algorithm>
#define z first
#define x second.first
#define y second.second
using namespace std;
pair <int,pair <int,int> > v[3501];
int a[3501][3501],n;
void refac (int i,int j,int p){
int xx,yy;
for (xx=i;xx<=n;xx+=(xx&-xx)){
for (yy=j;yy<=n;yy+=(yy&-yy))
a[xx][yy]=p;
}
}
void update (int i,int j,int p){
int xx,yy;
for (xx=i;xx<=n;xx+=(xx&-xx)){
for (yy=j;yy<=n;yy+=(yy&-yy))
a[xx][yy]=max(a[xx][yy],p);
}
}
int query (int i,int j){
int xx,yy,sol=0;
for (xx=i;xx;xx-=(xx&-xx))
for (yy=j;yy;yy-=(yy&-yy))
sol=max(a[xx][yy],sol);
return sol;
}
int main()
{
FILE *fin=fopen ("cutii.in","r");
FILE *fout=fopen ("cutii.out","w");
int t,i,sol,mc;
fscanf (fin,"%d%d",&n,&t);
for (;t;t--){
for (i=1;i<=n;i++)
fscanf (fin,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
sort (v+1,v+n+1);
// d[i][j] lvl maxim de imbricare al unor cutii cu c.x<=i && c.y<=j
sol=0;
for (i=1;i<=n;i++){
mc=query (v[i].x,v[i].y)+1;
update (v[i].x,v[i].y,mc);
sol=max(sol,mc);
}
fprintf (fout,"%d\n",sol);
for (i=1;i<=n;i++)
refac (v[i].x,v[i].y,0);
}
return 0;
}