《P1801 黑匣子》

題目描述

Black Box 是一種原始的數據庫。它可以儲存一個整數數組,還有一個特別的變量?i。最開始的時候 Black Box 是空的.而?i=0。這個 Black Box 要處理一串命令。

命令只有兩種:

  • ADD(x):把?x?元素放進 Black Box;

  • GET:i?加?1,然后輸出 Black Box 中第?i?小的數。

記住:第?i?小的數,就是 Black Box 里的數的按從小到大的順序排序后的第?i?個元素。

我們來演示一下一個有11個命令的命令串。(如下表所示)

序號操作i數據庫輸出
1ADD(3)03/
2GET133
3ADD(1)11,3/
4GET21,33
5ADD(-4)2?4,1,3/
6ADD(2)2?4,1,2,3/
7ADD(8)2?4,1,2,3,8/
8ADD(-1000)2?1000,?4,1,2,3,8/
9GET3?1000,?4,1,2,3,81
10GET4?1000,?4,1,2,3,82
11ADD(2)4?1000,?4,1,2,2,3,8/

現在要求找出對于給定的命令串的最好的處理方法。ADD?命令共有?m?個,GET?命令共有?n?個。現在用兩個整數數組來表示命令串:

  1. a1?,a2?,?,am?:一串將要被放進 Black Box 的元素。例如上面的例子中?a=[3,1,?4,2,8,?1000,2]。

  2. u1?,u2?,?,un?:表示第?ui??個元素被放進了 Black Box 里后就出現一個?GET?命令。例如上面的例子中?u=[1,2,6,6]?。輸入數據不用判錯。

輸入格式

第一行兩個整數?m?和?n,表示元素的個數和?GET?命令的個數。

第二行共?m?個整數,從左至右第?i?個整數為?ai?,用空格隔開。

第三行共?n?個整數,從左至右第?i?個整數為?ui?,用空格隔開。

輸出格式

輸出 Black Box 根據命令串所得出的輸出串,一個數字一行。

輸入輸出樣例

輸入 #1復制

7 4
3 1 -4 2 8 -1000 2
1 2 6 6

輸出 #1復制

3
3
1
2

說明/提示

數據規模與約定
  • 對于?30%?的數據,1≤n,m≤104。
  • 對于?50%?的數據,1≤n,m≤105。
  • 對于?100%?的數據,1≤n,m≤2×105,∣ai?∣≤2×109,保證?u?序列單調不降。

代碼實現:

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int main() {
? ? int m, n;
? ? cin >> m >> n;
? ? vector<int> a(m);
? ? for (int i = 0; i < m; ++i) {
? ? ? ? cin >> a[i];
? ? }
? ? vector<int> u(n);
? ? for (int i = 0; i < n; ++i) {
? ? ? ? cin >> u[i];
? ? }
? ??
? ? priority_queue<int> maxHeap;
? ? priority_queue<int, vector<int>, greater<int> > minHeap;
? ??
? ? int ptr = 0; ?// 當前處理到a的位置
? ? int getCount = 0; ?// 當前GET命令的數量
? ??
? ? for (int i = 0; i < n; ++i) {
? ? ? ? int target = u[i];
? ? ? ? // 處理ADD操作直到ptr達到target
? ? ? ? while (ptr < target) {
? ? ? ? ? ? int num = a[ptr++];
? ? ? ? ? ? maxHeap.push(num);
? ? ? ? ? ? // 調整兩個堆的平衡
? ? ? ? ? ? if (maxHeap.size() > getCount + 1) {
? ? ? ? ? ? ? ? minHeap.push(maxHeap.top());
? ? ? ? ? ? ? ? maxHeap.pop();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 處理GET操作
? ? ? ? ++getCount;
? ? ? ? cout << maxHeap.top() << endl;
? ? ? ? // 調整兩個堆的平衡
? ? ? ? if (!minHeap.empty()) {
? ? ? ? ? ? maxHeap.push(minHeap.top());
? ? ? ? ? ? minHeap.pop();
? ? ? ? }
? ? }
? ??
? ? return 0;
}

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

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

相關文章

Docker、Wsl 打包遷移環境

電腦需要開啟wsl2 可以使用wsl -v 查看當前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 內核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…

【Nginx】使用 Nginx+Lua 實現基于 IP 的訪問頻率限制

使用 NginxLua 實現基于 IP 的訪問頻率限制 在高并發場景下&#xff0c;限制某個 IP 的訪問頻率是非常重要的&#xff0c;可以有效防止惡意攻擊或錯誤配置導致的服務宕機。以下是一個詳細的實現方案&#xff0c;使用 Nginx 和 Lua 腳本結合 Redis 來實現基于 IP 的訪問頻率限制…

華為OD機考-機房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別while (in.hasNextLine()) { // 注意 while 處理多個 caseSystem.out.println(solve(in.nextLine()));}}priv…

Server - 使用 Docker 配置 PyTorch 研發環境

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/148421901 免責聲明&#xff1a;本文來源于個人知識與公開資料&#xff0c;僅用于學術交流&#xff0c;歡迎討論&#xff0c;不支持轉載。 建議使…

HarmonyOS5.0——CodeGenie:鴻蒙生態的AI編程革命?

??CodeGenie&#xff1a;鴻蒙生態的AI編程革命?? 華為推出的 ??CodeGenie?? 是集成于 DevEco Studio 的 AI 輔助編程工具&#xff0c;專為 HarmonyOS 應用開發設計。它通過深度優化 ArkTS 和 C 語言的代碼生成能力&#xff0c;顯著提升開發效率&#xff0c;降低鴻蒙生…

大模型模型部署和暴露接口

創建環境 激活案件 安裝相關依賴 conda create -n fastApi python3.10 conda activate fastApi conda install -c conda-forge fastapi uvicorn transformers pytorch pip install safetensors sentencepiece protobuf 新建文件夾 mkdir App cd App touch main.py 復制代碼…

Redis初入門

Nosql&#xff1a;Not-Only SQL&#xff08;泛指非關系型數據庫&#xff09;&#xff0c;作為關系型數據庫的補充 作用&#xff1a;應對基于海量用戶和海量數據前提下的數據處理問題 redis&#xff1a;C語言開發的一個開源的高性能鍵值對數據庫 特征&#xff1a; 1、數據之…

【原神 × 二叉樹】角色天賦樹、任務分支和圣遺物強化路徑的算法秘密!

【原神 二叉樹】角色天賦樹、任務分支和圣遺物強化路徑的算法秘密! 作者:星之辰 標簽:#原神 #二叉樹 #天賦樹 #任務分支 #圣遺物強化 #算法科普 發布時間:2025年6月 總字數:6000+ 一、引子:提瓦特大陸的“樹型奧秘” 你是否曾留意過《原神》角色面板的天賦樹? 升級技能…

C++信息學競賽中常用函數的一般用法

在C 信息學競賽中&#xff0c;有許多常用函數能大幅提升編程效率。下面為你介紹一些常見函數及其一般用法&#xff1a; 一、比較函數 1、max()//求出a&#xff0c;b的較大值 int a10,b5,c;cmax(a,b);//得出的結果就是c等于10. 2、min()//求出a&#xff0c;b的較小值 int a1…

Linux【3】-----系統框架概述

系統架構 文件系統 linux一定需要掛載操作系統 一切皆文件 三個文件 引導文件 uboot.bin內核鏡像 zImage文件系統鏡像 system.img 設備樹文件&#xff08;屬于內核&#xff09; 應用程序編程 arm中通過軟中斷實現 各程序的構成 文件I/O 5種I/O模型 阻塞非阻塞信號多…

Tensorrt python api 10.11.0筆記

關于Tensorrt的python api文檔閱讀翻譯加總結 文檔源地址 Overview Getting started with TensorRT Installation(安裝) 安裝可參考:官方地址 Samples 關于樣例的內容可參考:樣例地址 Operator Documentation 有關更多信息&#xff08;包括示例&#xff09;&#xff0…

電鍍機的陽極是什么材質?

知識星球&#xff08;星球名&#xff1a;芯片制造與封測技術社區&#xff0c;點擊加入&#xff09;里的學員問&#xff1a;電鍍的陽極有什么講究&#xff1f;什么是可溶性陽極和非可溶性陽極&#xff1f; 什么是可溶性陽極與非可溶性陽極&#xff1f; 可溶性陽極 陽極本身就是…

前段三劍客之JavaScript-02

目錄 簡介 核心 函數 字符串對象 事件 運算符和控制語句 DOM 正則表達式 BOM JSON 簡介 JavaScript由JavaScript語法&#xff0c;DOM和BOM組成 JS中提供了一些輸入輸出語句&#xff1a; alert(); //瀏覽器彈出警示框 console.log(); //控制臺打印 prompt(); //瀏覽器…

Qiskit:量子計算模擬器

參考文獻&#xff1a; IBM Qiskit 官網Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子計算&#xff1a;基本概念常見的幾類矩陣&#xff08;正交矩陣、酉矩陣、正規矩陣等&#xff09;Qiskit 安裝指南-博客園使用Python實現量子電路模擬&#x…

【Elasticsearch】Elasticsearch 核心技術(二):映射

Elasticsearch 核心技術&#xff08;二&#xff09;&#xff1a;映射 1.什么是映射&#xff08;Mapping&#xff09;1.1 元字段&#xff08;Meta-Fields&#xff09;1.2 數據類型 vs 映射類型1.2.1 數據類型1.2.2 映射類型 2.實際運用案例案例 1&#xff1a;電商產品索引映射案…

serv00 ssh登錄保活腳本-郵件通知版

適用于自己有服務器情況&#xff0c;ssh定時登錄到serv00&#xff0c;并在登錄成功后發送郵件通知 msmtp 和 mutt安裝 需要安裝msmtp 和 mutt這兩個郵件客戶端并配置&#xff0c;參考如下文章前幾步是講配置這倆客戶端的&#xff0c;很簡單&#xff0c;不再贅述 用Shell腳本實…

前端 Electron 桌面應用學習筆記

前端 Electron 桌面應用學習筆記 介紹Electron是什么?為什么選擇Electron?創建你的第一個桌面應用程序啟動項目運行結果截圖打開調試面板方法生命周期函數常用配置配置窗口標題配置小圖標隱藏菜單欄關閉調試面板是否可以使用Node.js隱藏 Electron 標題、小圖標和菜單欄獲取窗…

LeetCode - 94. 二叉樹的中序遍歷

題目 94. 二叉樹的中序遍歷 - 力扣&#xff08;LeetCode&#xff09; 什么是中序遍歷 二叉樹的中序遍歷是按照"左-根-右"的順序訪問二叉樹中的所有節點。 具體過程&#xff1a; 先遍歷左子樹&#xff08;遞歸&#xff09;然后訪問根節點最后遍歷右子樹&#xff…

PyTorch——搭建小實戰和Sequential的使用(7)

import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷積神經網絡模型模型結構&#xff1a;3層卷積池化&#xff0c;2層全連接設計目標&#xff1a;處理32x32像素的…

C#、VB.net——如何設置窗體應用程序的外邊框不可拉伸

以Visual studio 2015為例&#xff0c;具體操作如下&#xff1a; 1、將窗體的“FormBorderStyle”屬性值修改為“FixedSingle”&#xff1a; 2、點擊“格式”——“鎖定控件”&#xff1a; 這樣生成的程序邊框即可固定住&#xff0c;無法拉伸。