二分 字首和 2021 02 03第一更

2021-10-18 19:44:10 字數 735 閱讀 1434

現在有 n 位同學上交了作業,每位同學的作業本上都完成了數量不等的習題,由於時間有限,老師只能批改連續的作業,而且不超過 m 道題,還要盡可能多改幾個同學的作業。 現在,請你幫助老師決定,要批改哪一段同學的作業。

輸入第一行,包含兩個正整數n和m。

第二行包含n個用空格隔開的數,第i個數表示第i個同學完成的習題數。

輸出一行,共兩個數,表示批改的起點和終點編號,中間用空格分開。批改的方向總是從編號小的到編號大的。另外,若有長度相同的,輸出起點編號較小的答案。資料保證至少有答案存在。

輸入樣例

5 10

6 3 2 1 7

輸出樣例

2 4這道題目我一開始做的時候不會二分,就暴力for套for,然後就tle了5個點。後來學了二分,就用二分查詢去找以當前這個數為起點,可以批改的最多作業,再去比較是不是最多的,就可以了,這裡用上昨天說過的upper_bound函式來做。

#include

using

namespace std;

long

long n,a[

100010

],x,h,z,y;

intmain()

for(

int i=

1;i<=n;i++)}

cout<" "

}

字首和系列

二分系列

字首和 二分

powered by ab in 局外人 拿洛谷的乙個例子記一下字首和。資料超過了1e5,故o n 2 的演算法又行不通,所以換二分 include typedef long long ll using namespace std ll n,m,l,r ll a 1000001 sum 100000...

二分與字首和

時間複雜度o log n 資料區間 l mid r 實現 while l給定乙個按照公升序排列的長度為 n 的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素 k 的起始位置和終止位置 位置從 0 開始計數 如果陣列中不存在該元素,則返回 1 1。輸入格式 第一行包含整數 n 和 q,表示陣列...

二分和字首和(藍橋)

二分 1.數的範圍 題意 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。1 n 100010,q 10000.對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 思路 對於已經排好序的,且要求查詢陣列中某乙個數的位置,屬於搜尋類...