題解 Luogu P3901 數列找不同

2022-04-30 13:24:15 字數 817 閱讀 2187

塊數就直接取sqrt(n)

對所有詢問進行排序

考慮ai不大,暴力開陣列

add時如果加之後的數量是1

總數就加1

del時如果減之後的數量是0

總數就減1

每次比較總數和該次查詢區間的長度

相等的話就把 ans[q[i].id]設為真

最後如果ans[i]為真就輸出yes,否則輸出no

#pragma gcc optimize("o3")

#include #define n 100005

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();

return x*f;

}int v[n],blocksize=0;

struct queryq[n];

int sum[n];

bool ans[n];

int cnt=0;

inline void add(register int x)

inline void del(register int x)

inline bool cmp(register query a,register query b)

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

if(ans[i])

puts("yes");

else

puts("no");

return 0;

}

LUOGU P3901 數列找不同

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

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

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

P3901 數列找不同

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