洛谷P6859 蝴蝶與花

2021-10-25 01:14:06 字數 2209 閱讀 7254

傳送門 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

] 中所有數的和為 k+1

k+1k+

1 ,那麼 [l,

r−1]

[l,r-1]

[l,r−1

] 的和一定是 k−1

k-1k−

1 。故 ar=

2a_r=2

ar​=

2 。此時我們考慮將l

ll增大一。如果 al=

1a_l=1

al​=

1 那麼 [l+

1,r]

[l+1,r]

[l+1,r

] 已經是答案了。否則 [l+

1,r+

1]

[l+1,r+1]

[l+1,r

+1] 的和是不小於 k

kk 的。什麼情況下這個和是 k+1

k+1k+

1 呢?就是 ar+

1=

2a_=2

ar+1​=

2 的時候。

可以看到,乙個區間 [l,

r]

[l,r]

[l,r

] 在滿足 ar=

2a_r=2

ar​=

2 且 k−1

=∑i=

lr−1

ai

k-1=\sum_^a_i

k−1=∑i

=lr−

1​ai

​ 時,可以分成三種情況:

顯然只有一種情況要遞迴,我們只要能將其加速就好了。這種情況我們只需要問,l/r

l/rl/

r 開始的連續的 2

22 有多少個?可以樹狀陣列(或者線段樹)上二分。求出第乙個 r

rr 同樣方法。複雜度 o[(

n+m)

log⁡n]

\mathcal o[(n+m)\log n]

o[(n+m

)logn]

#include

#include

#include

#include

using

namespace std;

typedef

long

long int_;

inline

intreadint()

inline

intqkpow

(int_ b,int_ q,

int mod)

const

int maxn =21;

int bit[

1<, n, m, a[

1<;void

modify

(int id,

int x)

intquery

(int id)

/** @return min_ x*/

intfinds

(int s)

/** @return max_ x */

intcounttwo

(int id)

char zhihucuan[

1<<10]

;int

main()

if(opt ==

'a')if(

query

(r)== s)

if(a[1]

==1)int cnt1 =

counttwo(1

);int cnt2 =

counttwo

(r);

if(cnt1 < cnt2-r+1)

// 遇到了可以去頭的地方!

printf

("%d %d\n"

,cnt1+

2,r+cnt1)

;else}}

return0;

}

洛谷 P6859 蝴蝶與花

洛谷傳送門 amazing john 做了乙個夢,夢到他上輩子是只蒼茫蝶。深壑幽蘭,雨落蒼茫。憐其折翅,苦其執魔。瓊片織翼,花露餞行。伶仃蝶碎,蘭枯有情。君不識妾,妾仍思君。amazing john 很喜歡花。amazing john 的花圃裡有 nn 朵花,他每天都會在花園裡散步。對於每一朵花 a...

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

給定乙個 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 ...

擺花 洛谷p1077

小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的擺花方案。...