傳送門
這是乙個莫隊板子qwq
莫隊是一種離線暴力演算法,每次通過調整當前詢問和上次詢問的區間的不同的左右端點,並修改答案。
可以看出,調整的越少跑得越快,所以每次先把詢問的左右端點排個序,按左端點分塊,塊相同的按右端點排序
(玄學)
**如下
#include#includeview code#include
#include
#define mogeko qwq
using
namespace
std;
const
int maxn = 1e5+10
;int
n,q,sum,siz;
inta[maxn],num[maxn];
bool
ans[maxn];
struct
node
} b[maxn];
void add(int
x) void del(int
x) void
mo()
}int
main()
sort(b+1,b+q+1
); mo();
for(int i = 1; i <= q; i++)
if(ans[i])printf("
yes\n");
else printf("
no\n");
return0;
}
LUOGU P3901 數列找不同
傳送門 莫隊第一題,離線神器。先分塊,然後按左端點的塊為第一關鍵字,右端點為第二關鍵字排序,然後類似暴力的統計答案。時間複雜度o nsqrt n 不會證。include include include include include include using namespace std const...
題解 Luogu P3901 數列找不同
塊數就直接取sqrt n 對所有詢問進行排序 考慮ai不大,暴力開陣列 add時如果加之後的數量是1 總數就加1 del時如果減之後的數量是0 總數就減1 每次比較總數和該次查詢區間的長度 相等的話就把 ans q i id 設為真 最後如果ans i 為真就輸出yes,否則輸出no pragma ...
P3901 數列找不同
題意 每次詢問乙個區間裡的數是否各不相同 顯然,當乙個區間裡的數各不相同時,它們的種數就是區間的長度 莫隊可以快速地求出區間的顏色種數,因此強制離線計算即可 include using namespace std const int n 100005 int n,q,a n block,ans 0,...