現有數列 \(a_1,a_2,\cdots,a_n\) ,q 個詢問 \((l_i,r_i)\) , \(a_ ,a_,\cdots,a_\) 是否互不相同
輸入格式:
第1 行,2 個整數 \(n,q\)
第2 行,n 個整數 \(a_ ,a_,\cdots,a_\)
q 行,每行2 個整數 \(l_i,r_i\)
輸出格式:
對每個詢問輸出一行,「yes」 或者「no」
輸入樣例#1:
4 21 2 3 2
1 32 4
輸出樣例#1:
yesno
• 對於50% 的資料,\(n,q \le 10^3\)
• 對於100% 的資料, \(1 \le n,q \le 10^5, 1 \le a_i \le n, 1 \le l_i \le r_i \le n\)
當做莫隊裸題做了,加數和刪數的時候只要判之前或之後是不是一來更改某一段的貢獻
(這題還可以 \(o(n)\) 做,而且很好寫,不過為了寫個模板,就沒去寫了)
#include#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int maxn=100000+10;
int n,q,a[maxn],unit,be[maxn],cnt[maxn],sum,ans[maxn];
struct node
templateinline void write(t x,char ch='\0')
templateinline void chkmin(t &x,t y)
templateinline t min(t x,t y)
inline void add(int x)
inline void del(int x)
int main()
std::sort(query+1,query+q+1);
int l=1,r=0;
for(register int i=1;i<=q;++i)
for(register int i=1;i<=q;++i)puts(ans[i]?"no":"yes");
return 0;
}
《洛谷P3901 數列找不同》
提供兩種解法。第一種 直接對詢問離線,然後莫隊分塊。我們用乙個陣列vis來統計每個數出現的次數,然後維護區間內出現次數超過2的數量即可。一開始加了個vis i max vis i 0 防負數操作還wa了,這樣其實有點違背統計思想了。author levil includeusing namespac...
洛谷 P3901 數列找不同 思維
傳送門 給出n nn個數,以及q qq組詢問,對於li ri l i r i li ri 中所有數是否都是不相同的,如果是,就輸出yes yesye s,否則輸出nono no乙個很正常的思路就是對於每個區間都去判斷,但我們不妨換種思路,先預處理出對於每個位置符合條件的最右位置,然後在輸入範圍時就可...
P3901 數列找不同
題意 每次詢問乙個區間裡的數是否各不相同 顯然,當乙個區間裡的數各不相同時,它們的種數就是區間的長度 莫隊可以快速地求出區間的顏色種數,因此強制離線計算即可 include using namespace std const int n 100005 int n,q,a n block,ans 0,...