LUOGU P3901 數列找不同

2022-05-12 10:53:29 字數 906 閱讀 3655

傳送門

莫隊第一題,離線神器。先分塊,然後按左端點的塊為第一關鍵字,右端點為第二關鍵字排序,然後類似暴力的統計答案。時間複雜度o(nsqrt(n)) (不會證。。。)

#include

#include

#include

#include

#include

#include

using namespace std;

const int maxn = 1e5+5;

inline int rd()

while(isdigit(ch))

return

x*f;

}int n,m,siz,num,l,r,now;

int a[maxn],bl[maxn];

int b[maxn],ans[maxn];

struct askq[maxn];

inline bool cmp(ask a,ask b)

for(register int i=1;i<=m;i++) q[i].l=rd(),q[i].r=rd(),q[i].id=i;

sort(q+1,q+1+m,cmp);

l=0,r=0;now=0;

for(register int i=1;i<=m;i++)

while(r>q[i].r)

while(lwhile(l>q[i].l)

if(now==q[i].r-q[i].l+1) ans[q[i].id]=1;

}sort(q+1,q+1+m,cmp2);

for(register int i=1;i<=m;i++)

puts(ans[i]==1?"yes":"no");

return

0;}

題解 Luogu P3901 數列找不同

塊數就直接取sqrt n 對所有詢問進行排序 考慮ai不大,暴力開陣列 add時如果加之後的數量是1 總數就加1 del時如果減之後的數量是0 總數就減1 每次比較總數和該次查詢區間的長度 相等的話就把 ans q i id 設為真 最後如果ans i 為真就輸出yes,否則輸出no pragma ...

Luogu P3901 數列找不同 (莫隊模版)

傳送門 這是乙個莫隊板子qwq 莫隊是一種離線暴力演算法,每次通過調整當前詢問和上次詢問的區間的不同的左右端點,並修改答案。可以看出,調整的越少跑得越快,所以每次先把詢問的左右端點排個序,按左端點分塊,塊相同的按右端點排序 玄學 如下 include include include include ...

P3901 數列找不同

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