傳送門
給出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,...