bzoj3585 mex 分塊+莫隊演算法
題意:一個序列,多組詢問,求區間最小沒出現過的自然數。(n,m<=100000)
許可權題囧
就不敲程式碼了吧,或者有時間再敲?
orz popoqqq 真是太神了
題解:首先考慮詢問只有一次怎麼做。按權值分塊。例如:
1 2 3 | 4 5 6 | 7 8 9
block1|block2 | block3
每塊內記錄每塊內有多少權值出現過(ans1),並記錄每個權值出現次數(ans2)。
回答時看每塊 ans1==block.size 是否為真,如果為真,代表這塊裡的每個值都出現過,走下一塊。如果為假,那麼這塊裡有沒出現過的,暴力在塊內從左到右找判斷 ans2==0 的真假
複雜度O(sqrt(n))
如果多次詢問呢?莫隊演算法修改ans1 ans2即可。
所以這道題複雜度O(msqrt(n)+msqrt(n))。
相關推薦
bzoj3585 mex 分塊+莫隊演算法
題意:一個序列,多組詢問,求區間最小沒出現過的自然數。(n,m<=100000) 許可權題囧 就不敲程式碼了吧,或者有時間再敲? orz popoqqq 真是太神了 題解:首先考慮詢問只有
BZOJ 3585: mex(分塊+莫隊)
傳送門 解題思路 首先直接莫隊是能被卡的,時間複雜度不對。就考慮按照值域先進行分塊再進行莫隊,然後統計答案的時候就暴力掃所有的塊,直到一個塊內元素不滿,再暴力掃這個塊就行了,時間複雜度O(msqrt(n)) 程式碼 #include<iostream> #include<cstd
分塊/莫隊演算法Codeforces86D
題目連結:http://codeforces.com/contest/86/problem/D #include <bits/stdc++.h> using namespace std; using ll = long long ; const int N =
分塊+莫隊||BZOJ3339||BZOJ3585||Luogu4137||Rmq Problem / mex
題面:P4137 Rmq Problem / mex 題解:先莫隊排序一波,然後對權值進行分塊,找出第一個沒有填滿的塊,直接for一遍找答案。 除了bzoj3339以外,另外兩道題Ai範圍都是1e9。顯然最劣情況下答案是N,所以大於N的Ai都直接無視就可以。 由於求的是最小的自然數,自然數包括
bzoj3809: Gty的二逼妹子序列 分塊+莫隊
bzoj3809: Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他們遇到了一個難題。 對於一段妹子們,他們想讓你幫忙求出這之內美麗度∈[a,b]的妹子的美麗度的種類數。 為了方便,我們規定妹子們的美麗度全都在[1,n]中。
[BZOJ3236][Ahoi2013]作業:樹套樹/(分塊+莫隊)
分析 第一問隨便搞,直接說第二問。 令原數列為\(seq\),\(pre_i\)為\(seq_i\)這個值上一個出現的位置,於是可以簡化詢問條件為: \(l \leq i \leq r\) \(a \leq seq_i \leq b\) \(pre_i < l\) 這是一個顯然
Newcoder 58 F.序列查詢(莫隊演算法+分塊+連結串列)
Description 給你一個序列 a a a,有
關於分塊演算法and莫隊演算法
先說分塊演算法(這是一個線上的演算法) 我們將長度為n的序列分為sqrt(n)個小塊 對於每個詢問區間[l, r], 有些塊是完全包含其中的,有些塊是部分包含的 對於完全包含其中的塊
Newcoder 39 F.重排的迴文串(莫隊演算法+位運算)
Description 給一個長為 n n n 的只含小寫字母的字串 每次查詢一個區間$ [l
Newcoder 40 F.珂朵莉的約數(數論+莫隊演算法)
Description 珂朵莉給你一個長為 n n n的序列,有
「知識學習&日常訓練」莫隊演算法(一)(Codeforce Round #340 Div.2 E)
題意 已知一個長度為\(n\)的整數數列\(a[1],a[2],…,a[n]\),給定查詢引數\(l,r\),問\([l,r]\)內,有多少連續子段滿足異或和等於\(k\)。 也就是說,對於所有的\(x,y (l\le x\le y\le r)\),能夠滿足\(a[x]\oplus a[x+1]\oplus
「日常訓練&知識學習」莫隊演算法(二):樹上莫隊(Count on a tree II,SPOJ COT2)
題意與分析 題意是這樣的,給定一顆節點有權值的樹,然後給若干個詢問,每次詢問讓你找出一條鏈上有多少個不同權值。 寫這題之前要參看我的三個blog:CFR326D2E、CFR340D2E和HYSBZ-1086,然後再看這幾個Blog—— 參考A:https://blog.sengxian.com/algori
淺談普通莫隊演算法
前言 對於一個維護區間的問題,最暴力的方法就是每次列舉區間,進行統計。 而這就是莫隊的基本思路 但不過莫隊的列舉是進行優化的,可以優化到\(O(N\sqrt{N})\) 基本思路 首先:已知\([L,R]\)的答案,那麼求\([L-1,R]\) 、\([L+1,R]\) 、\([
BZOJ 2038 莫隊演算法
對於一個區間詢問[L,R],我們要求的ans是 ans=Σ[(sum(color[i])−1)∗sum(color[i])/2)]/[((R−L+1)∗(R−L))/2] 化簡ans=(Σ-(R-L+1))/((R-L+1)*(R-L)) sum(color[i])時第
Gym-101879 H 莫隊演算法
先把溫度離散化 c[]代表這個溫度有幾個 sum[]代表有幾天同樣溫度的溫度個數 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=30005; in
[bzoj4542][莫隊演算法]大數
Description 小 B 有一個很大的數 S,長度達到了 N 位;這個數可以看成是一個串,它可能有前導 0,例如00009312345 。小B還有一個素數P。現在,小 B 提出了 M 個詢問,每個詢問求 S 的一個子串中有多少子串是 P 的倍數(0 也 是P 的倍數)。
SPOJ-DQUERY D-query 莫隊演算法
題意: 給定一個區間和2e5次查詢, 查詢區間[L, R]的不同的數的個數. 分析: 莫隊和主席樹都可以解決, 先離線再處理查詢. 1. 莫隊演算法: 莫隊演算法一般用來處理區間查詢問題, 區間
P1494 [國家集訓隊]小Z的襪子(莫隊演算法)
莫隊板子 程式碼 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #define int long long using namespace std; st
【總結】 莫隊演算法
前言 機房中的各位神仙都會莫隊就我不會,然後如果有些題實在想不出也可以用這個做一下。 思路 如果一些操作可以在知道\(Ans(l,r)\)的情況下,\(O(1)\)的時間內求出\(Ans(l-1,r),Ans(l+1,r),Ans(l,r+1),Ans(l,r-1)\),那麼就可以用莫隊求解。
【暴力搜尋】【莫隊演算法】【貪心】[Codeforces Round #340 (Div. 2) ]題解報告
A. Elephant #include <cstdio> int main(){ int n; scanf("%d", &n); printf("