【算法】贪心扫描线(+堆)

【题意】给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数。

【题解】

参考:[bzoj1707]: [Usaco2007 Nov]tanning分配防晒霜 by czllgzmzl

本题同样是区间和点的贪心,可以参考另一道题【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)

区间和点的贪心有两种经典做法,本题一样。

一、从区间角度出发,按区间右端点排序

区间第二关键字按左端点从小到大排序,防晒霜排序后,对于每个区间选择其最左的防晒霜。

这个过程可以用二分+并查集实现,参考上帝造题2。

二、从点的角度出发,按区间左端点排序

对于每个防晒霜,对左影响一致(左边的能用都用了)的情况下,给右端点最小的。

用堆实现。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cctype>
using namespace std;
const int maxn=;
priority_queue<int,vector<int>,greater<int> >q;
int n,m;
struct interval{int x,y;}b[maxn];
struct point{int x,c;}a[maxn];
bool cmp(interval a,interval b){return a.x<b.x;}
bool cmp2(point a,point b){return a.x<b.x;} int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
int main(){
m=read();n=read();
for(int i=;i<=m;i++)b[i].x=read(),b[i].y=read();
for(int i=;i<=n;i++)a[i].x=read(),a[i].c=read();
sort(b+,b+m+,cmp);
sort(a+,a+n+,cmp2);
int now=,ans=;
for(int i=;i<=n;i++){
while(now<m&&b[now+].x<=a[i].x)now++,q.push(b[now].y);
for(int j=;j<=a[i].c;j++){
while(!q.empty()&&q.top()<a[i].x)q.pop();
if(q.empty())break;
ans++;q.pop();
}
}
printf("%d",ans);
return ;
}

【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜的更多相关文章

  1. BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜(扫描线+贪心+优先队列)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1707 [题目大意] 每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值 防晒霜的作 ...

  2. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜【贪心||最大流(?)】

    洛谷上能过的最大流bzoj上T了--但是贪心做法明明在洛谷上比最大流要慢啊--如果是最大流的话就是裸题了吧 说一下贪心,就按照防晒霜排序,然后对每一个防晒霜选一头可以使用的且r最小的牛 就,没了. 贪 ...

  3. BZOJ 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  4. 1707: [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 548  Solved: 262[Sub ...

  5. BZOJ——T 1707: [Usaco2007 Nov]tanning分配防晒霜

    http://www.lydsy.com/JudgeOnline/problem.php?id=1707 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8 ...

  6. BZOJ1707:[Usaco2007 Nov]tanning分配防晒霜

    我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  7. BZOJ1707 : [Usaco2007 Nov]tanning分配防晒霜

    S向每头奶牛连边,容量1 每个防晒霜向T连边,容量cover 每头奶牛向SPF在自己范围内的防晒霜连边,容量inf 用线段树优化建图跑最大流即可. #include<cstdio> con ...

  8. [BZOJ1707] [Usaco2007 Nov] tanning分配防晒霜 (贪心)

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  9. 【bzoj1707】[Usaco2007 Nov]tanning分配防晒霜 贪心+Treap

    题目描述 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SPF值分别为mi ...

随机推荐

  1. 写在SVM之前——凸优化与对偶问题

    SVM之问题形式化 SVM之对偶问题 SVM之核函数 SVM之解决线性不可分 >>>写在SVM之前——凸优化与对偶问题 本篇是写在SVM之前的关于优化问题的一点知识,在SVM中会用到 ...

  2. zuoyeQAQ

    public class StringAPIDemo { /** * @param args */ public static void main(String[] args) { // TODO A ...

  3. java结合testng,利用XML做数据源的数据驱动示例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值 ...

  4. C#和Java访问修饰符的比较

    访问修饰符对于C#:类 的默认修饰符是 internal(外部类只能被public / internal 修饰)枚举 的默认修饰符是 public 且此类型不允许其它访问修饰符接口 的默认修饰符是 i ...

  5. 零拷贝Zero-Copy(NIO)

    介绍 Java 的zero copy多在网络应用程序中使用.Java的libaries在linux和unix中支持zero copy,关键的api是java.nio.channel.FileChann ...

  6. 【Python】Python 猜年龄的游戏

    游戏规则: 允许用户最多尝试3次 每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序 如何猜对了,就直接退出 age= cou ...

  7. 树状数组模板(pascal) 洛谷P3374 【模板】树状数组1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  8. jmeter同步定时器

    同步定时器是jmeter中一个比较重要的定时器,同步定时器,相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起并发,可以用来做大数据量的并发请求. 验证 ...

  9. 【BZOJ4912】天才黑客(最短路,虚树)

    [BZOJ4912]天才黑客(最短路,虚树) 题面 BZOJ 洛谷 题解 \(Anson\)爷讲过的题目,然而我还是不会做 只有照着\(zsy\)的程序打我才会做....果然太弱了. 这道题目显然是把 ...

  10. Linux内核分析7

    一.理论知识 Linux中,可以从c源代码生产一个可执行程序,这其中要经过预处理.编译和链接的过程.可以参考以下图来理解这个过程: 其中,目标文件中至少有编译后的机器指令代码.数据,也还包括了链接时所 ...