給定乙個\(12\)串,問能否找到\(l\)最小的區間\([l,r]\)使得\(sum[l,r]\)恰好等於\(s\)
過程中可以修改單點,修改後也只能是\(1或者2\)
串的長度\(n\),\(m\)次詢問
對每個詢問若有合法方案輸出這個方案的\(l,r\)否則輸出\(none\)
\[1\leq n ,m\leq 2\times 10^6\\
0\leq s \le 2^-1
\]顯然不能直接暴力
我們利用字首和維護區間和,如果以1為起點,二分出和不小於\(k\)的\(r\),容易發現而分出的區間的和要麼是\(k\),要麼是\(k+1\)。
假設二分出\([l,r_1]\),\([l+1,r_2]\)且兩個區間的和都是\(k+1\)
可以發現
這樣發現其實和連續\(2\)的個數有關。
規律總結後有如下性質:
二分出從位置1的開始和不小於\(k\)的右端點\(p\)。利用資料結構求出位置1和位置\(p\)後連續\(2\)的個數分別為\(cnt1,cnt2\)
只需要解決兩個問題
這兩個問題都可以在樹狀陣列內2分實現(注意如果用2分 + 樹狀陣列 複雜度會多乙個log)
對於問題2,只需要判斷區間\([p,p + len - 1]\)的和是否是\(2 \times len\)即可
當然也可以用線段樹複雜度\(o(mlogn)\)
ll c[maxn];
struct bit
}int query(int x)
return res;
}int query1(int k)
return p;
}int query2(int k)
return p;
}};int a[maxn];
int main()
else
else }}
}}
洛谷P6859 蝴蝶與花
傳送門 to luogu 這思路真是絕了 我不知道該怎麼說。注意到左端點需要最小,所以我們一來先猜 l 1 l 1l 1 假如我們求出乙個最小的 r rr 使得 l,r l,r l,r 中所有數的和超過 k kk 那麼這個和最多是k 1 k 1k 1 同時,如果說 l,r l,r l,r 中所有數的...
洛谷 P6859 蝴蝶與花
洛谷傳送門 amazing john 做了乙個夢,夢到他上輩子是只蒼茫蝶。深壑幽蘭,雨落蒼茫。憐其折翅,苦其執魔。瓊片織翼,花露餞行。伶仃蝶碎,蘭枯有情。君不識妾,妾仍思君。amazing john 很喜歡花。amazing john 的花圃裡有 nn 朵花,他每天都會在花園裡散步。對於每一朵花 a...
傅利葉 有關FFT,DFT與蝴蝶操作
首先明確一下基本概念吧,就三點,dft,fft,蝴蝶操作。dft 離散傅利葉變換 書上寫的最清楚的一句話叫做,向量y y0,y1,yn 1 是係數向量a a0,a1,an 1 的離散傅利葉變換,也寫作y dftn a 說白了,就是求n個y值,但是n個自變數x的取值很特殊。fft 快速傅利葉變換 這個...