每日算法:洛谷U535992 J-C 小夢的寶石收集(雙指針、二分)

題目描述

小夢有?n?顆能量寶石,其中第?i?顆的能量為?ai?,但這些能量寶石十分不穩定,隨時有可能發生崩壞,導致他們全部消失!

小夢想要留住寶石們,不希望他們發生崩壞,同時他發現:如果這些寶石的能量的極差越大,則這些寶石們越不穩定,因此他希望最小化這些寶石的能量的極差(最大值減去最小值的差值)。

小夢有一招點石成金的技能,這個技能可以以如下方式改變一些寶石的能量:

??要么小夢選擇一塊能量最小的寶石,將他變成一塊當前能量最大的寶石。

??要么小夢選擇一塊能量最大的寶石,將他變成一塊當前能量最小的寶石。

形式化的即:

??選擇?i?(1≤i≤n,ai?=min(a1?,a2?,...,an?)),執行:ai?:=max(a1?,a2?,...,an?)。

??或選擇?i?(1≤i≤n,ai?=max(a1?,a2?,...,an?)),執行:ai?:=min(a1?,a2?,...,an?)。

小夢至多可以使用?k?次上述的 ”點石成金“ 技能,他想知道這些寶石的能量極差最小可以變為多少,請你幫他算一算吧。

輸入格式

本題有多組測試數據。

輸入的第一行包含一個正整數?T,表示數據組數。

接下來包含?T?組數據,每組數據的格式如下:

第一行兩個正整數?n,k,分別表示小夢擁有的寶石數量?n?,和他最多可以釋放 “點石成金” 技能的次數?k。

第二行?n?個正整數?ai?,表示每塊寶石的能量。

輸出格式

對于每組測試數據:

在單獨的一行輸出一個整數,表示寶石能量的極差最小值。

輸入輸出樣例

輸入 #1

2
8 3
1 2 3 4 5 6 7 8
4 3
100 1 100 2

輸出 #1

4
0

說明/提示

【樣例 1 解釋】

使用?3?次操作一,選擇?min?變為?max,操作完后數組變成:{8,8,8,4,5,6,7,8}。

此時數組的極差為?4?最小,可以證明不存在比?4?更優的答案。

【數據范圍】

令?N?表示?T?組數據中?n?的總和。

對于?30%?的數據有:T=1,1≤k≤N≤20。

對于?60%?的數據有:1≤T≤10,1≤k≤N≤2000。

對于所有的測試數據有:?1≤T≤1000,1≤N≤5×105,0≤k≤n,0≤ai?≤109。

思路:

我們很容易想到,先將數組進行排序,然后分別用兩個指針l,和r表示最左側的最大值和最右側的最小值。

?每次只要有將最小值變成最大值或者將最大值變成最小值的情況出現,那么我們就需要移動左或右指針到次小或次大值的位置上。

這樣,我們假設當l指針在i位置,r指針在j位置時,找到答案,則操作次數為:(i-1)【操作左邊要用的次數】+(n-j)【操作右邊要用的次數】+min(i-1,n-j)【將左邊的值變成最大值或將右邊的值變為最小值后,額外再需要移動的次數 例:如果左邊是1,右邊是8,修改左邊后,最后面的兩個數應該是8,8因此如果此時要再操作右邊,應該額外加上左邊的操作次數,同理另一種情況也是如此,而這個值我們希望它盡可能小,這樣可操作的次數就會變多】

而由題目規定,我們可知:(i-1)+(n-j)+min(i-1,n-j) <= k

因此當符合這一規定時,我們 則用ans記錄它的差值,取最小值。

于是我們可以很輕松的想到雙重循環遍歷枚舉,但是雙重循環肯定過不了,然后我們發現:該數組中的數是單調遞增的,且滿足二分性,因此我們可以將第二重循環優化為二分,這樣的時間復雜度是nlogn。

代碼:

#include<bits/stdc++.h>using namespace std;
int t,n,k;
const int N = 5e5+10;
int q[N];int main(){cin>>t;while(t--){cin>>n>>k;for(int i =1;i<=n;i++){cin>>q[i];}sort(q+1,q+n+1);//先從小到大排序 int ans = INT_MAX;//初始化為極大值 for(int i = 1;i<=n;i++){if(i - 1 > k) break;int l = i,r = n;//在從i到n的區間里找到右邊界 if(i - 1>k) break;//操作次數超過k了,直接跳出 while(l <= r){int mid = (l+r) / 2;if((i-1) + (n - mid) + min(i-1,n-mid) <= k) r = mid-1;else l = mid+1;}ans = min(ans,q[l]-q[i]);//每次更新取最小值 }cout<<ans<<endl;}return 0;
}

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

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

相關文章

Spring MVC 邏輯視圖(JSP、Thymeleaf、FreeMarker)與非邏輯視圖(JSON、Excel、PDF、XML)詳解及示例

Spring MVC 邏輯視圖與非邏輯視圖詳解及示例 一、邏輯視圖與非邏輯視圖的定義 類型定義邏輯視圖通過視圖解析器&#xff08;ViewResolver&#xff09;將邏輯名稱&#xff08;如 success&#xff09;映射到具體視圖實現。非邏輯視圖直接返回具體視圖對象&#xff08;如 JsonVie…

【AAOS】【源碼分析】CarAudioService(二)-- 功能介紹

汽車音頻是 Android 汽車操作系統 (AAOS) 的一項功能,允許車輛播放信息娛樂聲音,例如媒體、導航和通信。AAOS 不負責具有嚴格可用性和時間要求的鈴聲和警告,因為這些聲音通常由車輛的硬件處理。將汽車音頻服務集成在汽車中,徹底改變了駕駛體驗,為駕駛員和乘客提供了音樂、…

docker安裝軟件匯總(持續更新)

1、簡介 本文介紹一些常用的軟件通過docker安裝并啟動&#xff0c;持續更新。 2、docker安裝軟件 2.1、zookeeper & kafka # 1、拉取zookeeper鏡像 git pull wurstmeister/zookeeper # 2、啟動zookeeper容器 docker run -d --restartalways --log-driver json-file --lo…

MySQL的左連接、右連接、內連接、外連接

一、前言 MySQL中的左連接、右連接、內連接和全外連接是用于多表關聯查詢的核心操作。 二、內連接&#xff08;INNER JOIN&#xff09; 定義&#xff1a;返回兩個表中完全匹配的行&#xff0c;即只保留兩個表連接字段值相等的行。示例場景&#xff1a;查詢所有有選課記錄的學…

前端面試寶典---數據類型

基本數據類型 對于基本類型在創建時無需使用 new 關鍵字 Bigint在實際開發不常用&#xff0c;如果對于精度要求高可以使用第三方庫&#xff0c;如decimal.js 基本數據類型介紹 undefined&#xff1a;當變量被聲明但未賦值&#xff0c;或者函數沒有返回值時&#xff0c;就會呈現…

Lua 函數使用的完整指南

在 Lua 中&#xff0c;函數是一等公民&#xff08;First-Class Citizen&#xff09;&#xff0c;這意味著函數可以像其他值一樣被賦值、傳遞和操作。以下是 Lua 函數定義的完整指南&#xff0c;涵蓋基礎語法、高級特性、設計模式及性能優化。 在Lua 中&#xff0c;函數定義的完…

使用StockTV API對接印度金融市場數據全指南:K線、實時行情與IPO新股

一、印度金融市場數據特點 印度作為全球增長最快的主要經濟體之一&#xff0c;其金融市場具有以下顯著特征&#xff1a; 雙交易所體系&#xff1a;國家證券交易所(NSE)和孟買證券交易所(BSE)高流動性品種&#xff1a;Nifty 50指數成分股、銀行股等獨特交易機制&#xff1a;T2…

2021-10-26 C++繁忙通信兵

緣由繁忙的通訊兵&#xff0c;可以解決一下嗎-編程語言-CSDN問答 void 繁忙通信兵() {//緣由https://ask.csdn.net/questions/7544401?spm1005.2025.3001.5141int a 200, s1 8, s2 5, s3 45, p 0, n 0, c 0;std::cin >> n;while (a > n){a - s1 s2;if (a &l…

【Linux】進程控制:創建、終止、等待與替換全解析

文章目錄 前言一、重談進程創建二、進程終止2.1 正常終止的退出碼機制2.2 異常終止的信號機制2.3 進程常見的退出方法 三、進程等待&#xff1a;避免僵尸進程的關鍵3.1 進程等待的必要性3.2 進程等待的兩個系統調用接口3.2.1 wait()3.2.2 waitpid()區別 四、進程程序替換4.1 進…

基于Redis實現短信防轟炸的Java解決方案

基于Redis實現短信防轟炸的Java解決方案 前言 在當今互聯網應用中&#xff0c;短信驗證碼已成為身份驗證的重要手段。然而&#xff0c;這也帶來了"短信轟炸"的安全風險 - 惡意用戶利用程序自動化發送大量短信請求&#xff0c;導致用戶被騷擾和企業短信成本激增。本…

【后端開發】Spring MVC-常見使用、Cookie、Session

文章目錄 代碼總結初始化--RestController、RequestMapping傳遞參數單參數多參數 傳遞對象后端參數重命名&#xff08;后端參數映射&#xff09;--RequestParam必傳參數設置非必傳參數 傳遞數組傳遞集合傳遞JSON數據JSON語法JSON格式轉換JSON優點傳遞JSON對象 獲取URL中參數--P…

青少年編程考試 CCF GESP Python七級認證真題 2025年3月

Python 七級 2025 年 03 月 題號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 下列哪個選項是python中的關鍵字&#xff1f; A. function B. class C. method D. object…

Vue 框架組件間通信方式

組件間通信方式 不管是 vue2 還是 vue3&#xff0c;組件通信方式很重要&#xff0c;以下是常見的幾種通信方式&#xff1a; props&#xff1a;可以實現父子組件、子父組件、甚至兄弟組件通信自定義事件&#xff1a;可以實現子父組件通信全局事件總線 $bus&#xff1a;可以實現…

SpringBoot學生成績管理系統設計與實現

概述 幽絡源本次分享的基于SpringBoot的學生成績管理系統項目&#xff0c;采用主流的Java技術棧開發&#xff0c;實現了從學生信息管理到成績統計分析的全流程數字化管理。 主要內容 管理員功能模塊 ??學生信息管理??&#xff1a;維護學生基本信息檔案&#xff0c;支持…

青少年編程與數學 02-016 Python數據結構與算法 01課題、算法

青少年編程與數學 02-016 Python數據結構與算法 01課題、算法 一、算法的定義二、算法的設計方法1. 分治法2. 動態規劃法3. 貪心算法4. 回溯法5. 迭代法6. 遞歸法7. 枚舉法8. 分支定界法 三、算法的描述方法1. **自然語言描述**2. **流程圖描述**3. **偽代碼描述**4. **程序設計…

Java 實現冒泡排序:[通俗易懂的排序算法系列之二]

引言 大家好!歡迎來到我的排序算法系列第二篇。今天,我們將學習另一種非常基礎且廣為人知的排序算法——冒泡排序 (Bubble Sort)。 冒泡排序的名字非常形象,它模擬了水中氣泡上升的過程:較小(或較大)的元素會像氣泡一樣,通過不斷交換,逐漸“浮”到數組的一端。 什么是…

struct結構體、union聯合體和枚舉

目錄 一、結構體的聲明和使用 1.1 結構體正常聲明和創建 1.2 結構體特殊聲明 1.3 結構體的自引用 二、結構體內存對齊 2.1 對齊規則 2.2 #pragma修改 三、結構體傳參 四、結構體位段 4.1 位段內存分配 4.2 位段內存應用 五、結構體中的柔性數組概念 六、union聯合…

大模型本地部署系列(2) Ollama部署DeepSeek-R1

成功運行截圖 部署步驟 我們進入到ollama的官網&#xff1a; Ollama?ollama.com/?編輯 找到上方的Models &#xff0c;然后點擊 此時會跳轉到模型列表頁面&#xff1a; 點擊 deepseek-r1 鏈接進去&#xff0c;此時我們會看到下拉框中有各個版本的大模型&#xff0c;越往后…

繪制動態甘特圖(以流水車間調度為例)

import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np from matplotlib import cm# 中文字體配置&#xff08;必須放在所有繪圖語句之前&#xff09; plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Fa…

PyTorch實現線性回歸的基礎寫法與封裝API寫法

目錄 1. 基礎寫法 1.1導包 2.2加載讀取數據 2.3原始數據可視化(畫圖顯示) 2.4線性回歸的(基礎)分解寫法 2.5定義訓練過程 2.PyTorch實現 線性回歸的封裝寫法(實際項目中的常用寫法) 2.1創建線性回歸模型 2.2定義損失函數 2.3定義優化器 2.4定義訓練過程 1…