2015百度之星 初賽1 1002(rmq)

2021-07-02 23:19:53 字數 1008 閱讀 6955

題目:

小度熊拿到了乙個無序的陣列,對於這個陣列,小度熊想知道是否能找到乙個k 的區間,裡面的 k 個數字排完序後是連續的。

現在小度熊增加題目難度,他不想知道是否有這樣的 k 的區間,而是想知道有幾個這樣的 k 的區間。

input

輸入包含一組測試資料。

第一行包含兩個整數n,m,n代表陣列中有多少個數字,m 代表針對於此陣列的詢問次數,n不會超過10的4次方,m 不會超過1000。第二行包含n個正整數,第 i 個數字代表無序陣列的第 i 位上的數字,數字大小不會超過2的31次方。接下來 m 行,每行乙個正整數 k,含義詳見題目描述,k 的大小不會超過1000。

output

第一行輸"case #i:"。(由於只有一組樣例,只輸出」case #1:」即可)

然後對於每個詢問的 k,輸出一行包含乙個整數,代表陣列中滿足條件的 k 的大小的區間的數量。

思路:對於每個長度為k的區間只需滿足區間最大值減去區間最小值為k-1且沒有重複元素就滿足條件,所以預處理區間最大值最小值和重複元素的判定,因為k<1000,所以判重複時可以把n^2即10^8的複雜度降為10^7,但其實由於這道題資料太特殊,只有一組資料,這兩者差距不是太大。

#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

const int maxn = 10000 + 10;

const int inf = 0x3f3f3f3f;

//freopen("input.txt", "r", stdin);

int a[maxn], b[maxn], dmax[maxn][15], dmin[maxn][15], chongfu[maxn];

void rmq_init(int n)

for(int j = 1; (1< 

百度之星 初賽B

a 傳送門 點我 求聯通塊個數,對於簡單圖而言,就是c v e,其中c就是聯通塊個數,v是頂點數,e是邊數 include include include include using namespace std const int max n 2e5 10 int n,m,k vectorg max...

2023年百度之星程式設計大賽 初賽 1

b problem description 小度熊拿到了乙個無序的陣列,對於這個陣列,小度熊想知道是否能找到乙個k 的區間,裡面的 k 個數字排完序後是連續的。現在小度熊增加題目難度,他不想知道是否有這樣的 k 的區間,而是想知道有幾個這樣的 k 的區間。input 輸入包含一組測試資料。第一行包含...

百度之星2017初賽題解(A)

t1 簡單數論,問滿足 a0 a1 b an b n a0 a1 an mod p 的p的個數 即滿足p b 1 a1 b 2 1 a2 b 3 1 a3 即p b 1的p的個數 sqrt b 1 暴力列舉b 1約數即可 t2 現在給若干個條件,xi xj或xi xj,要你將它們劃分成若干組,滿足每...