洛谷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.pswp.cn/news/371238.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371238.shtml
英文地址,請注明出處:http://en.pswp.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…