hdu 4268 Alice and Bob(multiset|段树)
Alice and Bob
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2901 Accepted Submission(s): 941
of A is not smaller than B and the width of A is not smaller than B. As the best programmer, you are asked to compute the maximal number of Bob's cards that Alice can cover.
Please pay attention that each card can be used only once and the cards cannot be rotated.
For each case, the first line is a number N which means the number of cards that Alice and Bob have respectively. Each of the following N (N <= 100,000) lines contains two integers h (h <= 1,000,000,000) and w (w <= 1,000,000,000) which means the height and
width of Alice's card, then the following N lines means that of Bob's.
2
2
1 2
3 4
2 3
4 5
3
2 3
5 7
6 8
4 1
2 5
3 4
1
2
pid=4273" target="_blank">4273
4270 4269(n<=1e5)如今A想用自己的矩形覆盖B的矩形。一个矩形覆盖还有一个矩形的条件是宽和高都不还有一个矩形相应的宽和高小。如今问A最多能覆盖B的多少个矩形。每一个矩形最多覆盖一个还有一个矩形。且矩形不能旋转。
然后对于A的每个矩形。找一个w<=自己w.h<自己H且尽量接近的B的矩形覆盖即可了。
覆盖后删除这两个矩形。对于找上述条件的矩形能够用multiset维护。
可是比赛时换了种姿势用线段树写了发。
思路都差点儿相同。离散化。维护区间和。找小于等于p且最靠右的位置。
#include <iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define lson L,mid,ls
#define rson mid+1,R,rs
const int maxn=100010;
int num[maxn<<3];//离散化后有2*n忘了改大空间了。 坑
struct node
{
int w,h;
} ag[maxn],bg[maxn];
int H[maxn<<1];
inline bool cmp(const node &a,const node &b)
{
if(a.w==b.w)
return a.h<b.h;
return a.w<b.w;
}
void build(int L,int R,int rt)
{
num[rt]=0;
if(L==R)
return ;
int ls=rt<<1,rs=ls|1,mid=(L+R)>>1;
build(lson);
build(rson);
}
void update(int L,int R,int rt,int p,int d)
{
if(L==R)
{
num[rt]+=d;
return;
}
int ls=rt<<1,rs=ls|1,mid=(L+R)>>1;
if(p<=mid)
update(lson,p,d);
else
update(rson,p,d);
num[rt]=num[ls]+num[rs];
}
int qu(int L,int R,int rt,int p)
{
if(!num[rt])
return -1;
if(L==R)
return L;
int ls=rt<<1,rs=ls|1,mid=(L+R)>>1,pos=-1;
if(p<=mid)
return qu(lson,p);
if(num[rs])
pos=qu(rson,p);
if(pos!=-1)
return pos;
return qu(lson,p);
}
int main()
{
int t,n,i,m,p,ans; scanf("%d",&t);
while(t--)
{
m=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&ag[i].h,&ag[i].w);
H[m++]=ag[i].h;
}
for(i=0;i<n;i++)
{
scanf("%d%d",&bg[i].h,&bg[i].w);
H[m++]=bg[i].h;
}
sort(ag,ag+n,cmp);
sort(bg,bg+n,cmp);
sort(H,H+m);
m=unique(H,H+m)-H;
build(1,m,1);
ans=p=0;
for(i=0;i<n;i++)
{
while(p<n&&bg[p].w<=ag[i].w)
update(1,m,1,lower_bound(H,H+m,bg[p].h)-H+1,1),p++;
int pos=qu(1,m,1,lower_bound(H,H+m,ag[i].h)-H+1);
if(pos!=-1)
{
ans++;
update(1,m,1,pos,-1);
}
}
printf("%d\n",ans);
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
hdu 4268 Alice and Bob(multiset|段树)的更多相关文章
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- HDU 4268 Alice and Bob 贪心STL O(nlogn)
B - Alice and Bob Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- hdu 4268 Alice and Bob(贪心+multiset)
题意:卡牌覆盖,每张卡牌有高(height)和宽(width).求alice的卡牌最多可以覆盖多少bob的卡牌 思路:贪心方法就是找h可以覆盖的条件下找w最大的去覆盖. #include<ios ...
- HDU 4268 Alice and Bob set用法
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4268 贪心思想,用set实现平衡树,但是set有唯一性,所以要用 multiset AC代码: #i ...
- hdu 3660 Alice and Bob's Trip(树形DP)
Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 5054 Alice and Bob(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and Alice got separated ...
- hdu 4111 Alice and Bob(中档博弈题)
copy VS study 1.每堆部是1的时候,是3的倍数时输否则赢: 2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢: 3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶 ...
随机推荐
- WinDbg分析DMP文件方法完全攻略
前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试.在开发人员测试出现的bug,我们可以直接在本地进行调试.如果测试人员测试出崩溃级别的bug, ...
- oc深坑測试题及其答案
一.选择题(共80题,每题1分) 1. 不会立马使引用计数器改变的是: 答案:(C) A.release B.alloc C.autorelease D.retain 2. 在OC中类的接口声 ...
- Ello讲述Haar人脸检测:易懂、很详细、值得围观
源地址:http://www.thinkface.cn/thread-142-1-1.html 由于工作需要,我开始研究人脸检测部分的算法,这期间断断续续地学习Haar分类器的训练以及检测过程,在这里 ...
- 24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...
- sprintf,多少钱你知道?
选<CSDN 社区电子杂志——C/C++杂志>http://emag.csdn.net 2005 年1 月 总号1 期 - 93 -笔者:steedhorse(晨星)printf 可能是很 ...
- poj 3270 更换使用
1.确定初始和目标状态. 明确.目标状态的排序状态. 2.得出置换群,.比如,数字是8 4 5 3 2 7,目标状态是2 3 4 5 7 8.能写为两个循环:(8 2 7)(4 3 5). 3.观察当 ...
- 多项式相乘(C语言)
//两个多项式的系数f分别存在x[]和y[]中,下标即为次数,*Max表示本多项式最高次数 int MX_double( double x[], int xMax, double y[], int y ...
- 图解:如何U盘装Win7系统(傻瓜式装机) + 分区步骤图解(用WIN7自带管理工具)
原地址:http://wenku.baidu.com/link?url=wV2Pfw2IM21u2KmtAcNweSZRwpXRuKAVAS29dS4aWGEpMtFdDlzZvixCgsvBxIm- ...
- wkhtmtopdf--高分辨率HTML转PDF(一)
原文:wkhtmtopdf--高分辨率HTML转PDF(一) 一.需求 这次工作中遇到一个需求,要求把网页转换为PDF,穷极了很多的方法,包括尝试了itextsharp来转换,虽然可以实现,但是分辨率 ...
- C语言中的system函数參数具体解释
http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功 能: 发出一个DOS命令 用 法: int sy ...