洛谷P1937 [USACO10MAR]仓配置Barn Allocation

题目描述

Farmer John recently opened up a new barn and is now accepting stall allocation requests from the cows since some of the stalls have a better view of the pastures.

The barn comprises N (1 <= N <= 100,000) stalls conveniently numbered 1..N; stall i has capacity C_i cows (1 <= C_i <= 100,000). Cow i may request a contiguous interval of stalls (A_i, B_i) in which to roam (1 <= A_i <= N; A_i <= B_i <= N), i.e., the cow would like to wander among all the stalls in the range A_i..B_i (and the stalls must always have the capacity for her to wander).

Given M (1 <= M <= 100,000) stall requests, determine the maximum number of them that can be satisfied without exceeding stall

capacities.

农夫约翰最近开了一个新的牲口棚屋,并且现在接受来自奶牛的分配畜栏请求因为其中的一些畜栏有更好风景。

畜栏包括N个畜栏(1 ≤ N ≤ 100,000),方便起见,我们把它们编号为1..N,畜栏i能容纳Ci只牛(1 ≤ Ci ≤ 100,000),第i只牛需要连续编号畜栏(从Ai到Bi)来漫步其中,

(1 ≤ Ai ≤ N; Ai ≤ Bi ≤ N),换言之,这只牛想要在编号范围为Ai..Bi的畜栏漫步(所有它想要畜栏必须实施为它空出位置来供它散步)

给出M个畜栏分配请求(1 ≤ M ≤ 100,000),回答最多能满足多少只牛的要求(不增加另外畜栏)

考虑以下例子:

畜栏号:    1   2   3   4   5 +---+---+---+---+---+ 容纳空间: | 1 | 3 | 2 | 1 | 3 | +---+---+---+---+---+ Cow 1 XXXXXXXXXXX (1, 3) Cow 2 XXXXXXXXXXXXXXX (2, 5) Cow 3 XXXXXXX (2, 3) Cow 4 XXXXXXX (4, 5)

约翰显然不能满足所有的牛,因为畜栏3,4请求太多了

经过试验,我们发现,我们能满足牛1,3,4需要,所以这组数据答案为3

输入输出格式

输入格式:

 

第一行包括两个以空格隔开的正整数:N,M

第二行到第N+1行:第i+1行包括一个整数:Ci

第N+2到第N+M+1行:第i+N+1 包括两个整数Ai、Bi

 

输出格式:

 

仅一行:能满足的最大需要

 

输入输出样例

输入样例#1:
5 4
1
3
2
1
3
1 3
2 5
2 3
4 5
输出样例#1:
3

说明

Source: USACO 2010 March Gold

Translator: @chrome01

分析:这道题其实和借教室那道题差不多,可以考虑用线段树来维护,我们考虑一个区间是只用考虑它的最小值的,如果最小值都能满足条件,那么肯定是能够满足条件的,那么怎么样才能让题目给定的区间不重复呢?考虑贪心,我们先按照右端点从小到大排序,再按照左端点从大到小排序,这样可以保证区间之间尽量不要互相影响,最后先查询最小值,再修改就好了.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;const int inf = 0x7ffffff;int n,m,minn[300010],flag[300010],ans;
bool flag2 = false;struct node
{int a,b;    
}e[100010];bool cmp(node x,node y)
{if (x.b != y.b)return x.b < y.b;elsereturn x.a > y.a;
}void pushup(int o)
{minn[o] = min(minn[o * 2],minn[o * 2 + 1]);
}void pushdown(int o)
{if (flag[o]){flag[o * 2] += flag[o];flag[o * 2 + 1] += flag[o];minn[o * 2] -= flag[o];minn[o * 2 + 1] -= flag[o];}flag[o] = 0;
}void build(int l,int r,int o)
{if (l == r){scanf("%d",&minn[o]);return;}int mid = (l + r) >> 1;build(l,mid,o * 2);build(mid + 1,r,o * 2 + 1);pushup(o);
}void update(int l,int r,int o,int x,int y)
{if (x <= l && r <= y){flag[o]++;minn[o]--;return;}pushdown(o);int mid = (l + r) >> 1;if (x <= mid)update(l,mid,o * 2,x,y);if (y > mid)update(mid + 1,r,o * 2 + 1,x,y);pushup(o);
}int query(int l,int r,int o,int x,int y)
{if (x <= l && r <= y)return minn[o];pushdown(o);int mid = (l + r) >> 1,res = inf;if (x <= mid)res = min(query(l,mid,o * 2,x,y),res);if (y > mid)res = min(query(mid + 1,r,o * 2 + 1,x,y),res);return res;
}int main()
{scanf("%d%d",&n,&m);build(1,n,1);for (int i = 1; i <= m; i++)scanf("%d%d",&e[i].a,&e[i].b);sort(e + 1,e + 1 + m,cmp);for (int i = 1; i <= m; i++){if (query(1,n,1,e[i].a,e[i].b) <= 0)continue;update(1,n,1,e[i].a,e[i].b);ans++;}printf("%d\n",ans);return 0;
}

 

转载于:https://www.cnblogs.com/zbtrs/p/7510346.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸数据库大全(包括人脸识别、关键点检测、表情识别,人脸姿态等等)

搞计算机视觉的人&#xff0c;对人脸技术并不陌生。在做实验的时候需要各种数据集进行训练&#xff0c;却往往苦于找不到合适的数据集&#xff0c;这篇文章将给大家带来一点福音。 目前为止最全的是人脸数据库总结&#xff1a; The Color FERET Database, USA The FERET progra…

JavaFX游戏(四连环)

这是我的第一个JavaFX游戏教程&#xff0c;也是我关于JavaFX面板的第一篇博客文章。 我仅用200几行代码就完成了这款四连环游戏&#xff0c;足以应付一个简单的游戏。 我在这里使用GridPane面板对磁盘进行布局&#xff0c;GridPane是JavaFX布局窗格之一&#xff0c;但它与另一个…

vs使用了未初始化的局部变量怎么解决_C程序为什么要初始化?

作者:守望,Linux应用开发者,目前在公众号【编程珠玑】 分享Linux/C/C++/数据结构与算法/工具等原创技术文章和学习资源。 前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题。 什么是初始化 初始化…

maven 配置 pom.xml 打包生成:单jar包/jar包+lib目录

http://www.jianshu.com/p/9146cec6cc60转载于:https://www.cnblogs.com/Baronboy/p/7510942.html

zabbix安装MySQL失败_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...

本文主要向大家介绍了MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。如题所示&#xff0c;在CentOS6.x的系统中安装zabbix3.x&#xff…

拼图项目:延期的后果

Mark Reinhold先生于2012年7月宣布 &#xff0c;他们计划从Java 8撤回Jigsaw项目 &#xff0c;因为Jigsaw计划于2013年9月&#xff08;从现在开始一年&#xff09;推迟其发布。 这个日期是众所周知的&#xff0c;因为Oracle已决定实施Java的两年路线图计划&#xff0c;因此2013…

Navicat下Oracle数据泵的使用简单例子

如何使用Navicat等数据库开发工具进行高效开发将是未来工作的重点。Navicat一来美观而来够操作够傻瓜&#xff0c;使用得当其强大功能与PL SQL不相上下。今天学习就是如何在Navicat中使用数据泵进行数据导入导出。 数据泵使用前事项&#xff1a;想使用数据泵必须以sys或system等…

前端自动化之nvm安装

nvm ——node环境版本控制工具。 1.解压安装包 2.打开setting文件&#xff0c;修改文件内容 root: D:\node\nvm path: D:\node\nodejs arch: 64 proxy: root&#xff1a;当前nvm所在的路径 path&#xff1a;将root路径的nvm改为nodejs arch&#xff1a;64位系统 3.配置环境变量…

mysql 主从复制介绍_MySQL 主从复制介绍

一、MySQL 主从复制简介(1) MySQL 主从复制通过逻辑的 binlog 日志复制到要同步的服务器本地&#xff0c;然后由本地的线程读取日志里面的 SQL 语句&#xff0c;重新应用到 MySQL 数据库中(2) 在复制过程中&#xff0c;一台服务器充当主服务器&#xff0c;接收来自用户的内容更…

【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s=a+b+c+d;...

数组没有length()这个方法&#xff0c;有length的属性。String有有length()这个方法。 int a[]; a.length;//返回a的长度 String s; s.length();//返回s的长度 java中数组没有length()方法&#xff0c;求数组的长度可以使用数组的length属性。 int[] arr{1,2,3,4,5};int length…

Spring范围代理

考虑以这种方式定义的两个Spring bean&#xff1a; Component class SingletonScopedBean{Autowired private PrototypeScopedBean prototypeScopedBean;public String getState(){return this.prototypeScopedBean.getState();} }Component Scope(value"prototype")…

递归和分治的概念性的理解

递归的概念表述&#xff1a; 直接或间接调用自身的算法称为递归算法。 理解&#xff1a;递归算法的可以理解为多个算法的嵌套调用&#xff0c;只是调用算法是同一个&#xff0c;同时需要一个工作栈来作为各层次的数据存储区&#xff0c;包括所有实参指针&#xff0c;局部变量&a…

ibatis mysql sqlmapconfig_iBATIS sqlMapConfig配置详解

1 <?xml version"1.0" encoding"UTF-8"?>2 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">5 6 11 13 enhancementEnabled"true"14 lazyLoadingEnabled"true"15 errorTracingEnabled"true"16 m…

什么情况使用 weak 关键字,相比 assign 有什么不同?

什么情况使用 weak 关键字&#xff1f; 在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性 自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak&#xff1b;当然…

使用Spring Redis发布/订阅

继续发现功能强大的Redis功能集&#xff0c;值得一提的是对发布/订阅消息的开箱即用支持。 发布/订阅消息传递是许多软件体系结构的重要组成部分。 某些软件系统要求消息传递解决方案提供高性能&#xff0c;可伸缩性&#xff0c;队列持久性和持久性&#xff0c;故障转移支持&am…

python在律师上作中的实例_python-基础面试题

深拷贝1.对象A拷贝&#xff0c;生成对象B&#xff0c;且我们修改对象B(对象A)中的数据或方法&#xff0c;对象A(对象B)不会受影响&#xff0c;这就是深拷贝2.对于可变与不可变类型对于不可变类型&#xff0c;深拷贝会和浅拷贝一样&#xff0c;拷贝的是引用&#xff0c;不会创建…

2017 校招华为上机题

1. 给定一个字符串&#xff0c;把字符串内的字母转换成该字母的下一个字母&#xff0c; a 换成b&#xff0c;z 换成a&#xff0c;Z 换成A&#xff0c;如aBf 转换成bCg&#xff0c;字符串内的其他字符不改变&#xff0c;给定函数&#xff0c;编写函数void Stringchang&#xff0…

JSON –拯救杰克逊

有时您必须使用JavaScript从服务器中获取一些数据&#xff0c; JSON是完成此任务的不错选择。 让我们玩一下JPA揭秘&#xff08;第1集&#xff09;-OneToMany和ManyToOne映射中的“雇主-雇员-福利”示例。 我们将在基于Spring Framework的Web应用程序中使用它。 我们的第一个…

maven 使用记录之修改 maven默认jdk版本

maven package执行的时候会遇到jdk版本不对的问题 &#xff1a;原因是 maven所指定的jdk版本与项目使用的jdk版本不一致1.项目属性的 java compiler可以设置2.直接修改 maven 的 settings.xml 一劳永逸settiings.xml <profiles>标签内加入<profile> <id>j…

java默认值_Java中八种基本数据类型的默认值

通过一段代码来测试一下 8种基本数据类型的默认值package dierge;public class Ceshi {int a;double b;boolean c;char d;float f;byte e;long h;short j;public static void main(String args[]){Ceshi anew Ceshi();System.out.println("整型的默认值是&#xff1a;&quo…