P6859 蝴蝶與花 思維 資料結構優化

2022-06-12 21:21:11 字數 967 閱讀 5960

給定乙個\(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 快速傅利葉變換 這個...