區間選點問題-貪心-C++

?問題:

給定?𝑁?個閉區間?[ai,bi],請你在數軸上選擇盡量少的點,使得每個區間內至少包含一個選出的點。

輸出選擇的點的最小數量。

位于區間端點上的點也算作區間內。

輸入格式

第一行包含整數?𝑁,表示區間數。

接下來?𝑁?行,每行包含兩個整數 𝑎𝑖,𝑏𝑖,表示一個區間的兩個端點。

輸出格式

輸出一個整數,表示所需的點的最小數量。

數據范圍

1≤N≤10^5,
?10^9≤𝑎𝑖≤𝑏𝑖≤10^9

輸入樣例:
3
-1 1
2 4
3 5

?代碼:

#include<iostream>
#include<algorithm>
using namespace std;
using Pii = pair<int, int>;
const int N = 100010;
Pii Range[N];
int main(){int n;cin >> n;for (int i = 0; i < n;i++){cin >> Range[i].first >> Range[i].second;}sort(Range, Range + n, [](const Pii &a, const Pii &b) -> bool{ return a.second < b.second; });int ed = -2e9, res = 0;for (int i = 0; i < n;i++){if(Range[i].first>ed){res++;ed = Range[i].second;}}cout << res << endl;
}

題解:
? ? ? ? 題意就是給你10^5以下個區間,所以我們const int N = 100010;讓你在數軸上選擇一些點,這些點要能覆蓋得到所有的區間,當然了,數量越少越好:

? ? ? ? 以此圖為例子,灰色筆畫的這兩個點就是答案,你再也不可能找到更少的點來覆蓋每個區間了。

? ? ? ? 計算機并不容易比我們更容易地判斷出結果,我們可以先排個序看看:
?????????我們暫且以每個區間的右端點的由小而大來排序,我們如果以每個區間的右端點來設點,其實更有可能讓這個點覆蓋到下一個區間甚至下下一個區間,這樣更可能滿足要求,這是貪心的思想,即:短視地選擇我們遍歷的區間的右端點作為答案,然后妄想讓它盡可能地覆蓋下一個、下下一個點......

? ? ? ? 我們還發現:如果A區間的右端點在下一個區間(記為B)的左端點之右的話,那么我們把A區間的右端點放到答案中,它不僅可以覆蓋A區間,連B區間都覆蓋了,甚至滿足條件它連C區間也可以給覆蓋了......我們只需維護一個變量ed記為我們剛埋的點,剛開始這個ed我們賦值為負無窮,

遇到一個區間,如果它的左端點比ed還小,那說明不用管它了,ed完全可以覆蓋它,否則,說明這一個區間我們ed夠不著,需要在這個區間設點了,即把這個區間的右端點作為新的ed,讓他去在遍歷下一個區間時,看能不能不設點,ed就能覆蓋下一個區間。

? ? ? ? 總之,遇到區間問題,盡量想到排序,貪心.....

參考鏈接:鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17695.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS文本粒子動畫特效之愛心粒子文字特效-Canvas

1. 效果圖 2.完整代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;paddin…

order by工作過程和優化

工作過程 order by 是由優化器決定的&#xff0c;如果優化器認為filesort速度快&#xff0c;那么走filesort排序&#xff0c;如果優化器認為索引速度快&#xff0c;那么走索引排序。

有一個3x4的矩陣,求矩陣中所有元素中的最大值。要求用函數處理

解此題的算法已在之前的文章中介紹&#xff0c;詳見&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139181787 編寫程序&#xff1a; 運行結果&#xff1a;

常用的字符串方法

length() 返回字符串的長度。 let str "HelloWorld"; console.log(str.length); // 10charAt() 返回指定位置的字符。參數&#xff1a;位置索引。 let str "HelloWorld"; console.log(str.charAt(5)); // Wconcat() 連接字符串。參數&#xff1a;一…

昵稱生成器

package mainimport ("math/rand" )// 隨機昵稱 形容詞 var nicheng_tou []string{"迷你的", "鮮艷的", "飛快的", "真實的", "清新的", "幸福的", "可耐的", "快樂的", "冷…

卷徑計算(PID輸出補償法 SCL源代碼)

卷徑計算有很多方法,這里我們提供另一個思路,這里我們采用的是通過速度控制間接控制張力通過線速度和系統卷徑我們可以計算出我們的速度前饋量(主速度)。具體收放卷前饋量計算可以參考下面文章鏈接: 收放卷前饋量計算FC(梯形圖+SCL代碼)-CSDN博客文章瀏覽閱讀584次。這篇博…

【數據分析面試】55. 尋找雙詞組 (Python)

題目&#xff1a; 尋找雙詞組 &#xff08;Python&#xff09; 編寫一個名為 find_bigrams 的函數&#xff0c;該函數接收一個句子或段落的字符串&#xff0c;并按順序返回其所有雙詞組的列表。 注意&#xff1a; 雙詞組是指連續的兩個單詞。 示例&#xff1a; 輸入&#x…

JavaScript(ES6)入門

ES6 1、介紹 ECMAScript 6&#xff08;簡稱ES6&#xff09;是于2015年6月正式發布的JavaScript 語言的標準&#xff0c;正式名為ECMAScript 2015&#xff08;ES2015&#xff09;。它的目標是使得JavaScript語言可以用來編寫復雜的大型應用程序&#xff0c;成為企業級開發語言。…

Dolphinscheduler不重啟加載Oracle驅動

轉載自劉茫茫看山 問題背景 某天我們的租戶反饋數據庫連接缺少必要的驅動&#xff0c;我們通過日志查看確實是缺少部分數據庫的驅動&#xff0c;因為DolphinScheduler默認只帶了Oracle和MySQL的驅動&#xff0c;并且需要將pom文件中的test模式去掉才可以在打包的時候引入。我…

Unity Dotween 定位點的制作

目錄 前言 一、動畫預覽 二、動畫拆分 三、素材準備 四、曲線 OutCirc詳解 五、速度分類詳解 六、代碼 七、組件和設置 八、作者的話 前言 我答應我的粉絲接下來更新Dotween系列&#xff0c;但是我一直沒想好&#xff0c;從哪里開始講。 Dotween的安裝我就跳過了&…

QtCreator調試運行工程報錯,無法找到相關庫的的解決方案

最新在使用國產化平臺做qt應用開發時&#xff0c;總是遇到qtcreator內調試運行 找不到動態庫的問題&#xff0c;為什么會出現這種問題呢&#xff1f;明明編譯的時候能夠正常通過&#xff0c;運行或者調試的時候找不到相關的庫呢&#xff1f;先說結論&#xff0c;排除庫本身的問…

Flutter 中的 AnimatedList 小部件:全面指南

Flutter 中的 AnimatedList 小部件&#xff1a;全面指南 在Flutter中&#xff0c;AnimatedList是一個專門用于展示和管理一個有序列表的組件&#xff0c;它可以對列表中的項進行添加、移除和重新排序操作&#xff0c;并且這些操作都伴隨著動畫效果。這使得AnimatedList非常適合…

精釀啤酒:品質與口感在消費者選擇中的權重分析

在啤酒市場中&#xff0c;消費者選擇的影響因素眾多&#xff0c;其中品質與口感是兩個核心要素。對于Fendi club啤酒而言&#xff0c;品質與口感的權重分析在消費者選擇中顯得尤為重要。 品質是消費者選擇啤酒的首要因素。隨著消費者對啤酒認知的提高&#xff0c;他們對品質的…

德邦快遞和德邦物流運費標準哪個更劃算?怎樣才能便宜的寄大件快遞?

在寄大件包裹快遞時&#xff0c;我們一般都知道選擇德邦&#xff0c;那么德邦快遞和德邦物流的收費標準哪個更劃算呢&#xff1f;下面&#xff0c;讓我們一起來了解德邦快遞和德邦物流的收費標準&#xff0c;以及如何根據實際情況做出最佳選擇。 首先了解快遞費用構成 快遞費用…

Prometheus Operator創建告警規則并接入釘釘報警

prometheus之釘釘報警 前言1. 添加prometheus報警規則1.2 添加自定義報警規則文件 2. 配置釘釘報警2.2 部署dingding插件 3. 編寫alertmanager配置文件 前言 在kubenetes上安裝了kube-promethues&#xff08;包含Prometheus Operator&#xff09;,程序正常跑起來了&#xff0c…

IC開發——verdi基本用法

1. 基礎知識 1.1. verdi VCS和Verdi這兩個工具&#xff0c;這兩個工具目前都屬于synopsys公司。VCS主要負責編譯運行Testbench和RTL&#xff0c;并負責生成相應的波形文件。而verdi主要負責加載波形文件&#xff0c;查看信號的波形及其對應的代碼來進行調試驗證。Verdi最開始…

dimp導入提示 [警告]該工具不能解析此文件,請使用更高版本的工具

問題描述&#xff1a;dimp導入報錯 [dmdbalocalhost ~]$ dimp SYSDBA/Topnet_123\192.168.3.27:5241 FILEimp_exp.dmp LOGreport_ty_imp_20240528.log DIRECTORY/opt/dmdba LOG_WRITEY REMAP_SCHEMAreport:report_ty dimp V8[警告]文件"/opt/dmdba/report_ty_imp_2024052…

Linux 查找命令的操作,學完效率瞬間翻倍?

可以很肯定地說&#xff0c;find 命令是 Linux 運維必須熟知的操作之一。 讓我們看一道題&#xff1a; 如果你的 Linux 服務器上有一個名為 .logs 的目錄&#xff0c;如何刪除該目錄下最后一次訪問時間超過一年的日志文件呢&#xff1f; 這種情況很常見&#xff0c;但令人驚訝…

簡述nextTick 的作用是什么?他的實現原理是什么 ?

nextTick 的作用 在 Vue.js 中&#xff0c;nextTick 是一個非常有用的函數&#xff0c;它用于延遲執行一段代碼&#xff0c;直到下一次 DOM 更新循環結束之后。換句話說&#xff0c;當你修改了數據之后&#xff0c;視圖不會立即更新&#xff0c;而是等到下一次“DOM 更新循環”…

【Linux系統】進程間通信

本篇博客整理了進程間通信的方式管道、 system V IPC的原理&#xff0c;結合大量的系統調用接口&#xff0c;和代碼示例&#xff0c;旨在讓讀者透過進程間通信去體會操作系統的設計思想和管理手段。 目錄 一、進程間通信 二、管道 1.匿名管道 1.1-通信原理 1.2-系統調用 …