[10月考試] F

[10月考試] F

題目描述

給定長度為 nnn 的序列 ana_nan?,保證 aia_iai? 為非負整數。

mmm 次詢問,每次給定區間 l,rl,rl,r,求出 al,al+1,…,ara_l,a_{l+1},\ldots,a_ral?,al+1?,,ar?mexmexmex

對于一個序列,定義其 mexmexmex 為不在序列中出現的最小非負整數。

例如序列 1,2,5,71,2,5,71,2,5,7mexmexmex000,序列 3,0,1,2,53,0,1,2,53,0,1,2,5mexmexmex444

對于所有數據,n,m≤1000n,m\leq 1000n,m10001≤l≤r≤n1\leq l\leq r\leq n1lrn0≤ai≤10000\leq a_i\leq 10000ai?1000

輸入格式

輸入共 m+2m+2m+2 行。

111 行輸入 222 個正整數 n,mn,mn,m

222 行輸入 nnn 個非負整數 a1,a2,…,ana_1,a_2,\ldots,a_na1?,a2?,,an?

接下來 mmm 行,每行輸入 222 個正整數 l,rl,rl,r 代表一次詢問。

輸出格式

輸出共 mmm 行,每行輸出 111 個非負整數,代表一次詢問的答案。

樣例 #1

樣例輸入 #1

5 3
1 3 2 0 4
1 5
2 4
1 3

樣例輸出 #1

5
1
0

提示

對于 30%30\%30% 的數據,n,m≤5n,m\leq 5n,m5

對于 60%60\%60% 的數據,n,m≤100n,m\leq 100n,m100ai≤5a_i\leq 5ai?5

對于所有數據,n,m≤1000n,m\leq 1000n,m10001≤l≤r≤n1\leq l\leq r\leq n1lrn0≤ai≤10000\leq a_i\leq 10000ai?1000

題目解析

這道題要求我們對給定序列區間 [l, r] 求其 mex(即不在該區間內的最小非負整數)。mex 是序列中不包含的最小整數。例如,給定一個序列 1, 2, 3, 4,其 mex0,因為 0 是最小的且不在這個序列中。

解題思路

  1. 暴力解法

    • 對每一個查詢區間 [l, r],我們可以直接掃描區間 [l, r],找到其中所有的數,記錄這些數。
    • 然后從 0 開始,找到最小的一個沒有出現在區間內的數,返回這個數作為 mex

    由于題目中的 nm 最大為 1000,所以暴力方法的時間復雜度是 O(n * m),每次查詢的時間復雜度是 O(n)。最壞情況下,總時間復雜度為 O(n * m),在最壞情況下(n = 1000, m = 1000)是可以接受的。

具體實現

  1. 讀取輸入數據

  2. 處理每個查詢,對于每個查詢區間 [l, r],我們:

    • 利用一個數組 count 來記錄區間中各個數值的出現情況。

    • 找到最小的非負整數 mex,它不在區間內出現。

#include
#include
#include
using namespace std;

int main() {
int n, m;
cin >> n >> m;

vector<int> a(n);
for (int i = 0; i < n; i++) {cin >> a[i];
}// 處理每次查詢
for (int i = 0; i < m; i++) {int l, r;cin >> l >> r;l--; r--;  // 轉換為0-index// 用一個set來記錄區間內的所有數set<int> nums_in_range;for (int j = l; j <= r; j++) {nums_in_range.insert(a[j]);}// 找到mexint mex = 0;while (nums_in_range.count(mex)) {mex++;}cout << mex << endl;
}return 0;
}

代碼解析

  1. 輸入處理
    • 首先讀取 nm
    • 然后讀取長度為 n 的序列 a
  2. 查詢處理
    • 對于每個查詢區間 [l, r],我們通過 set<int> nums_in_range 來記錄該區間中所有不同的元素。
    • 通過遍歷區間 [l, r],將區間中的所有數插入到 nums_in_range 中(set 會自動去重)。
  3. 計算 mex
    • 0 開始查找最小的沒有出現的數,即 mex。我們使用 count 方法來檢查 mex 是否出現在 set 中,直到找到一個不在其中的 mex
  4. 輸出結果
    • 對于每次查詢,輸出對應的 mex 值。

時間復雜度

  • 對于每個查詢,掃描區間的時間復雜度是 O(r - l + 1),而構建 set 的時間復雜度是 O(r - l + 1)
  • 查找 mex 的時間復雜度是 O(mex),但是 mex 最大也不會超過區間中最大數值 + 1,所以它的時間復雜度是 O(n)(理論上最多為 n)。
  • 因此,每個查詢的時間復雜度為 O(n),總時間復雜度為 O(n * m),這是可以接受的。

簡單算法思路

  1. 遍歷查詢區間:對于每一個查詢,我們需要遍歷區間 [l, r],將該區間內的所有數保存到一個集合中。
  2. 計算 mexmex 是從 0 開始,找到最小的一個不在集合中的數。

優化:直接使用一個數組來記錄該區間內數字的出現情況,而不使用 set

#include
#include
using namespace std;

int main() {
int n, m;
cin >> n >> m;

vector<int> a(n);
for (int i = 0; i < n; i++) {cin >> a[i];
}// 處理每次查詢
for (int i = 0; i < m; i++) {int l, r;cin >> l >> r;l--; r--;  // 轉換為0-index// 用一個數組記錄區間內的數是否出現過bool appeared[1001] = {false};// 標記區間內的數for (int j = l; j <= r; j++) {appeared[a[j]] = true;}// 找到最小的沒出現的數即為mexint mex = 0;while (appeared[mex]) {mex++;}cout << mex << endl;
}return 0;
}

代碼解析

  1. 輸入處理
    • 首先讀取 nm
    • 然后讀取長度為 n 的序列 a
  2. 查詢處理
    • 對于每個查詢區間 [l, r],我們創建一個布爾數組 appeared,該數組用于標記區間內出現的數字。數組大小為 1001,涵蓋了所有可能出現的數字(0 到 1000)。
  3. 計算 mex
    • 對于每個區間 [l, r],我們將區間內的每個數對應的 appeared 數組位置標記為 true
    • 然后從 0 開始,查找最小的沒有被標記為 true 的數字,那個數字就是 mex
  4. 輸出結果
    • 對于每次查詢,輸出對應的 mex 值。

時間復雜度分析

  • 對于每個查詢,我們需要掃描區間 [l, r],這需要 O(r - l + 1) 的時間。最大時,區間長度為 n
  • 對于每個查詢,我們還需要檢查 appeared 數組的 mex 值,最多需要檢查 1001 個位置,時間復雜度是 O(1001),即常數時間。
  • 所以每個查詢的時間復雜度為 O(n),總時間復雜度為 O(n * m)

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

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

相關文章

收集了全球55個AI寫作工具

我們即將推出一整套AI生產力工具矩陣&#xff0c;覆蓋內容創作&#xff08;AI寫作助手&#xff09;、視覺設計&#xff08;智能圖像處理&#xff09;、音視頻制作&#xff08;自動轉錄與編輯&#xff09;及智能編程等多個核心領域。這些解決方案通過先進的機器學習算法&#xf…

Elastic 勞動力的生成式 AI:ElasticGPT 的幕后解析

作者&#xff1a;來自 Elastic Jay Shah, Adhish Thite ElasticGPT — 由 Elastic 提供支持&#xff0c;專為 Elastic 打造 ElasticGPT 是我們基于檢索增強生成&#xff08;RAG&#xff09;框架構建的內部生成式 AI &#xff08;GenAI&#xff09;助手。它是使用 Elastic 自有…

CS231n-2017 Assignment1

KNN&#xff1a;這里要求我們完成一個KNN分類器&#xff0c;實現對圖片使用KNN算法進行分類標簽k_nearest_neighbor.py這里要求我們完成4個接口# X:測試集 # 使用兩個循環 def compute_distances_two_loops(self, X):num_test X.shape[0]num_train self.X_train.shape[0]dist…

[python][flask]Flask-Principal 使用詳解

Flask-Principal 是一個專為 Flask 應用設計的身份管理和權限控制擴展。它能夠幫助開發者輕松實現用戶身份驗證和權限管理&#xff0c;從而提升應用的安全性和用戶體驗。該項目最初由 Ali Afshar 開發&#xff0c;現已成為 Pallets 社區生態系統的一部分&#xff0c;由社區共同…

抖音與B站爬蟲實戰,獲取核心數據

本文將深入講解兩大主流短視頻平臺&#xff08;抖音、B站&#xff09;的爬蟲實戰技術&#xff0c;提供可直接運行的代碼解決方案&#xff0c;并分享突破反爬機制的核心技巧。一、平臺特性與爬蟲難點對比平臺數據價值主要反爬措施推薦抓取方式抖音視頻數據、用戶畫像、熱榜簽名驗…

WSL切換網絡模式

WSL切換網絡模式問題WSL從NAT改成MIRRORED找到WSL Setting修改配置重啟電腦&#xff08;注意不是重啟WSL&#xff09;運行pio run驗證IP問題 從魚香ROS買了一個小魚車&#xff0c;開始學習&#xff0c;然而裝環境都要搞死我了。 垃圾VirtualBox我新買的電腦&#xff0c;裝個Vi…

[Linux入門] Linux 遠程訪問及控制全解析:從入門到實戰

目錄 一、SSH 遠程管理&#xff1a;為什么它是遠程訪問的首選&#xff1f; 1??什么是 SSH&#xff1f; 2??SSH 為什么比傳統工具更安全&#xff1f; 3??SSH 的 “三大組成部分” 4??SSH 工作的 “五步流程” 5??常用 SSH 工具 二、實戰&#xff1a;構建 SSH 遠…

n8n AI資訊聚合與分發自動化教程:從數據獲取到微信與Notion集成

引言 n8n簡介&#xff1a;自動化工作流利器 n8n是一款功能強大的開源自動化工具&#xff0c;采用獨特的“公平代碼”&#xff08;Fair-Code&#xff09;許可模式&#xff0c;旨在幫助用戶連接各種應用程序和服務&#xff0c;從而實現工作流的自動化。它通過直觀的可視化界面&am…

遞歸查詢美國加速-技術演進與行業應用深度解析

在當今數據驅動的時代&#xff0c;遞歸查詢已成為處理層級數據的核心技術&#xff0c;尤其在美國科技領域獲得廣泛應用。本文將深入解析遞歸查詢在美國加速發展的關鍵因素&#xff0c;包括技術演進、行業應用場景以及性能優化策略&#xff0c;幫助讀者全面理解這一重要技術趨勢…

【AIGC專欄】WebUI實現圖片的縮放

圖片的縮放包含如下的各類不同的縮放模型。 Lanczos Lanczos重采樣是一種數學上精確的方法,用于圖像放大或縮小。它使用了一種稱為 sinc 函數的數學公式,可以在保留圖像細節的同時減少鋸齒效應。 Nearest 最近鄰插值是一種簡單的圖像放大方法,通過復制最近的像素值來填充新…

Libevent(4)之使用教程(3)配置

Libevent(4)之使用教程(3)配置事件 Author: Once Day Date: 2025年7月27日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 本文檔翻譯于&#xff1a;Fast portable non-bl…

若依前后端分離版學習筆記(三)——表結構介紹

前言&#xff1a; 這一節將ruoyi框架中數據庫中的表結構過一遍&#xff0c;查看都有哪些表及其表結構及關聯關系&#xff0c;為后續代碼學習做準備。 一 代碼生成表記錄代碼生成的業務表及相關字段1 代碼生成業務表 CREATE TABLE gen_table (table_id bigint(20) NOT NULL AUTO…

NFS服務安裝與使用

概述 內網需要使用NFS服務掛載到其他服務器&#xff0c;用做數據備份使用。 安裝 # Centos yum install -y nfs-utils # Ubuntu apt install nfs-common配置 # 編輯 vim /etc/exports # 輸入內容 /public/KOL-ESbackup 172.29.1.0/24 192.168.8.63 192.168.8.64 192.168.8.65(r…

使用adb 發送廣播 動態改變app內的值

前言 在開發過程中有時候我們需要做一些調試工作。可以通過adb發送廣播實現。 廣播注冊 注意最后一個參數&#xff0c;Context.RECEIVER_EXPORTED 這是Android 34以后強制要求的&#xff0c;方便外部發送這個廣播。否則會報錯val filter IntentFilter()filter.addAction("…

【Web安全】邏輯漏洞之URL跳轉漏洞:原理、場景與防御

文章目錄前言一、漏洞本質二、攻擊原理正常跳轉流程漏洞觸發流程三、抓包的關鍵時機&#xff1a;跳轉參數生成時四、風險場景1.登錄/注冊后跳轉2.退出登錄跳轉3.分享/廣告鏈接跳轉4.密碼重置鏈接跳轉五、漏洞挖掘&#xff1a;怎么找到這種漏洞&#xff1f;1.找到跳轉參數2.篡改…

新手開發 App,容易陷入哪些誤區?

新手開發 App 時&#xff0c;常因對流程和用戶需求理解不足陷入誤區&#xff0c;不僅拖慢進度&#xff0c;還可能導致產品無人問津。?功能堆砌是最常見的陷阱。不少新手總想 “一步到位”&#xff0c;在初期版本就加入十幾項功能&#xff0c;比如做社區團購 App 時&#xff0c…

Linux學習篇11——Linux軟件包管理利器:RPM與YUM詳解與實戰指南,包含如何配置失效的YUM鏡像地址

引言 本文主要梳理 Linux 系統中的軟件包的概念&#xff0c;同時介紹RPM與YUM兩大核心管理工具的常用指令、區別聯系以及實戰技巧等。本文作為作者學習Linux系統的第11篇文章&#xff0c;依舊旨在總結當前的學習內容&#xff0c;同時鞏固知識以便日后的學習復習回顧。如有說的…

Vue3+ElementPlus實現可拖拽/吸附/搜索/收起展開的浮動菜單組件

在開發后臺管理系統時&#xff0c;我們經常會用到浮動菜單來快速訪問某些功能。本篇文章將分享一個基于 Vue3 ElementPlus 實現的浮動菜單組件&#xff0c;支持拖拽移動、邊緣吸附、二級菜單展開、菜單搜索過濾、視頻彈窗等交互效果&#xff0c;極大提升了用戶操作的便捷性與美…

CSS 盒子模型學習版的理解

文章目錄一、盒子模型構建流程&#xff08;一句話抓關鍵&#xff09;二、核心邏輯提煉三、代碼驗證四、一句話總結流程通過手繪圖示&#xff0c;清晰拆解 Content&#xff08;內容&#xff09;→ Padding&#xff08;內邊距&#xff09;→ Border&#xff08;邊框&#xff09;→…

解決線程安全的幾個方法

線程安全&#xff1a;線程安全問題的發現與解決-CSDN博客 Java中所使用的并發機制依賴于JVM的實現和CPU的指令。 所以了解并掌握深入Java并發編程基礎的前提知識是熟悉JVM的實現了解CPU的指令。 1.volatile簡介 在多線程并發編程中&#xff0c;有兩個重要的關鍵字&#xff1a…