Pagini recente » Cod sursa (job #1347503) | Cod sursa (job #3033528) | Cod sursa (job #97736) | Cod sursa (job #585427) | Cod sursa (job #2046292)
#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],d[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;
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++){
d[v[i].x][v[i].y]=query (v[i].x,v[i].y)+1;
update (v[i].x,v[i].y,d[v[i].x][v[i].y]);
sol=max(sol,d[v[i].x][v[i].y]);
}
fprintf (fout,"%d\n",sol);
for (i=1;i<=n;i++){
refac (v[i].x,v[i].y,0);
d[v[i].x][v[i].y]=0;
}
}
return 0;
}