區間未出現的最小值(牛客)

2022-06-09 04:09:06 字數 878 閱讀 1999

牛牛現在有乙個長度為 n 的序列 a1,a2,…,an​。現在牛牛有 q次詢問,每次想詢問區間 [l,r]的 mex 是什麼。

乙個序列的 mex 定義為最小未出現的自然數。

第一行兩個整數 n,q表示序列長度和詢問次數。

接下來一行 n個非負整數,表示序列 aia_iai​。

接下來 q行,每行兩個整數 li,ri表示詢問的區間。

q行,每行表示詢問的答案。

示例1複製

5 2

4 3 0 1 2

2 41 5

複製

2

5

n,q≤105,0≤ain,q≤105,0≤ai​區間[l,r]的為左邊區間[1,l]的最小值,和區間[r+1,n]的最小值再取乙個最小值

所有可以維護正向最小值和反向最小值

#include#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e6+100

;int

pre[maxn];

intprr[maxn];

inta[maxn];

intmain()

for(int i=n;i>=1;i--)

intl,r;

for(int i=1;i<=m;i++)

}

牛客網 旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。第一種思路是提交了的 中的最上邊的幾種解法 第二種思路來自於一本書,總體是...

求m區間的最小值

乙個含有n項的數列 n 2000000 求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。第一行兩個數n,m。第二行,n個正整數,為所給定的數列。n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。6 27 8 1 4 3 207 71...

區間最大最小值 ST表

這是一道st表經典題 靜態區間最大值 請注意最大資料時限只有0.8s,資料強度不低,請務必保證你的每次查詢複雜度為 o 1 o 1 若使用更高時間複雜度演算法不保證能通過。如果您認為您的 時間複雜度正確但是 tle,可以嘗試使用快速讀入 inline int read while isdigit c...