洛谷 P3901 數列找不同 思維

2021-09-27 19:04:31 字數 832 閱讀 2695

傳送門

給出n

nn個數,以及q

qq組詢問,對於li—

ri

l_i—r_i

li​—ri

​中所有數是否都是不相同的,如果是,就輸出yes

yesye

s,否則輸出nono

no乙個很正常的思路就是對於每個區間都去判斷,但我們不妨換種思路,先預處理出對於每個位置符合條件的最右位置,然後在輸入範圍時就可以o(1

)o(1)

o(1)

判斷了我們考慮能決定每個位置的最右位置的因素只有兩個:1.

1.1.

右邊一位的最右位置2.

\ 2.

2.往右最近一位相同的數字的位置

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

inline ll read()

while

(s>=

'0'&&s<=

'9')

return d*f;

}int s[

100005

],id[

100005];

int x[

100005];

intmain()

while

(q--

)return0;

}

《洛谷P3901 數列找不同》

提供兩種解法。第一種 直接對詢問離線,然後莫隊分塊。我們用乙個陣列vis來統計每個數出現的次數,然後維護區間內出現次數超過2的數量即可。一開始加了個vis i max vis i 0 防負數操作還wa了,這樣其實有點違背統計思想了。author levil includeusing namespac...

P3901 數列找不同

題意 每次詢問乙個區間裡的數是否各不相同 顯然,當乙個區間裡的數各不相同時,它們的種數就是區間的長度 莫隊可以快速地求出區間的顏色種數,因此強制離線計算即可 include using namespace std const int n 100005 int n,q,a n block,ans 0,...

洛谷 P3901 數列找不同 莫隊

題目描述 現有數列 a1,a2,a na 1,a 2,ldots,a n a1 a2 an q qq 個詢問 li ri l i,r i li r i 詢問 ali ali 1,ari a a ldots,a ali ali 1 ar i 是否互不相同。輸入格式 第一行,兩個整數 n,q n,qn,...