現有數列a_1,a_2,\cdots,a_na1,a2,⋯,an,q 個詢問(l_i,r_i)(li,ri),a_ ,a_,\cdots,a_ali,ali+1,⋯,ari 是否互不相同
輸入格式:
第1 行,2 個整數n,qn,q
第2 行,n 個整數a_ ,a_,\cdots,a_ali,ali+1,⋯,ari
q 行,每行2 個整數l_i,r_ili,ri
輸出格式:
對每個詢問輸出一行,「yes」 或者「no」
輸入樣例#1:複製
4 2
1 2 3 2
1 32 4
輸出樣例#1:複製
yes
no
• 對於50% 的資料,n,q \le 10^3n,q≤103
• 對於100% 的資料,1 \le n,q \le 10^5, 1 \le a_i \le n, 1 \le l_i \le r_i \le n1≤n,q≤105,1≤ai≤n,1≤li≤ri≤n
#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f
#define ll long long
const int maxn = 2e7+5;
using namespace std;
int a[maxn],ans[maxn];int block;
struct nodepp[maxn];
bool cmp(node a,node b)
int res ;//記錄不符合標記的數目
int book[maxn];
void reves(int k,int v)//k是當前要更新的位置v代表1為增加-1減少
book[u]++;
}else
book[u]--;
}}int main()
int l = 1,r = 0;//最左邊的不相交的
for(register int i = 0;i < q;++i)
sort(pp,pp+q,cmp);
for(register int i = 0;i < q;++i)
while(l < pp[i].l)
while(pp[i].r < r)
while(pp[i].r > r)
ans[pp[i].step] = res;
}//莫隊
for(register int i = 0;i < q;++i)
else
}//輸出答案
return 0;
}
P3901 數列找不同(簡單莫隊)
莫隊入門題目,區間不相同數查詢 應該用線段樹也能做,但是不知道該維護什麼。一篇很好的題解 莫隊演算法主要解決的問題 莫隊演算法是用來處理一類無修改的離線區間詢問問題。莫隊演算法的思想 1 分塊and排序,使相鄰的查詢區間盡量接近,curl和curr兩個指標移動的距離盡量少 2 桶排查找 1 incl...
模板 莫隊 P3901 數列找不同
目錄 模板 莫隊 p3901 數列找不同 傳送門沒有專門的模板,就把這道題作為模板啦 聽說這題有o n 預處理,o 1 詢問的方法,但是這不重要,還是先練練莫隊吧 演算法競賽 高階指南 裡面沒有專門講莫隊,學得就有一丟丟麻煩 簡單說,莫隊就是 優雅的暴力 首先要注意 莫隊是離線演算法 我們把詢問分成...
洛谷 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,...