POJ PKU 1065 Wooden Sticks 3636 Nested Dolls 解题报告
#include <iostream>
#include <functional>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 20002
struct doll
{
int w,h;
};
doll dolls[MAXN];
doll list[20002];
bool cmp(doll a, doll b)
{
if(a.w != b.w)
return a.w < b.w;
return a.h > b.h;
}
int main()
{
int t, m, i, num, l, r, mid;
scanf("%d", &t);
while(t --)
{
scanf("%d", &m);
for(i = 0; i < m; i ++)
scanf("%d %d", &dolls[i].w, &dolls[i].h);
sort(dolls, dolls + m, cmp);
memset(list, 0, sizeof(list));
num = 0;
for(i = 0; i < m; i ++)
{
l = 0;
r = num;
while(l < r)
{
mid = (l + r) / 2;
if((list[mid].w >= dolls[i].w) || list[mid].h >= dolls[i].h)
l = mid + 1;
else
r = mid;
}
if(num == l)
num ++;
list[l].w = dolls[i].w;
list[l].h = dolls[i].h;
}
printf("%d\n", num);
}
return 0;
}Last updated
Was this helpful?