2020ICPC江西省賽 C 列舉,二分

2021-10-10 18:44:50 字數 1526 閱讀 9939

題目大意:

給n

nn個線段.假設選擇k

kk個線段,它們的交集長度為s

ss.要求最大化min

(k,s

)min(k,s)

min(k,

s).n,l

i,ri

≤3e5

n , l_i,r_i\leq 3e5

n,li​,

ri​≤

3e5

題目思路:

首先想的是三分選擇的k

kk個線段。求最大的交集。因為s

ss隨著k

kk增大而減小。所以min

(k,s

)min(k,s)

min(k,

s)最大值存在於它們值接近的地方。

但是無法實現求最大交集.所以沒寫出來。

正解: 列舉交集長度sss.

列舉左端點l

ll.右端點r

rr越大,s

ss越大。但k

kk越小。

所以這個時候可以三分.但是這裡提供乙個二分的思路:

m in

(a,b

)min(a,b)

min(a,

b),a ,b

a,ba,

b成反比時。那麼我們可以求最大的a

aa使得a≤b

a \leq b

a≤b.

然後就是已知l,s

l,sl,

s,求k

kk:求有多少個li,

ri

l_i,r_i

li​,ri

​使得li≤

l&&r

i≤l+

s−

1l_i \leq l\ \&\& \ r_i \leq l + s - 1

li​≤l&

&ri​

≤l+s

−1這個顯然可以用樹狀陣列計算貢獻。

ac**:

#include

using

namespace std;

const

int maxn =

3e5+5;

vector<

int> a[maxn]

;int n , m , sum[maxn]

;int

lowbit

(int x)

void

add(

int x,

int c)

}int

ask(

int x)

return ans;

}int

main()

int ans =0;

for(

int i =

1; i <= n ; i++

) ans = max (ans , r - i +1)

;}cout << ans << endl;

return0;

}

2020ICPC江西省賽個人總結補題

結果 solo8題,一發過。還有三道題有思路,但是沒寫出來.b,e,i,k,m題水.g.mathematical practice 題目大意 讓你將n個元素劃分成m個有順序的互不相交的子集 可以為空 問方案數。思路 1.看樣例猜結論 2.令dp i,j dp i,j dp i,j 代表i個元素劃分成...

2020(ICPC)江西省程式設計競賽正式賽

b 簽到題 include include include using namespace std intmain return0 e colour sequence 題意 給出乙個字串,每個字元代表一種顏色,輸出滿足所有顏色出現次數均為偶數次的連續子串的個數 思路 位運算 分析 0 ci 20,用...

2020ICPC模擬賽E(區間dp)

eeat walnuts 每次只能選乙個數字 下標為 j,i為它前乙個數字下標,k為下乙個數字的下標 而且這個數字不能是開頭或者結尾數字,把它消耗掉的代價是 a i a j a k 2,問最後剩兩個數字的時候的最小總花費是多少。區間dp,其實挺簡單,當時憨批了,其實一直是。pragma gcc op...