小路綾只會做料理 ayaya

2021-10-09 03:34:53 字數 2973 閱讀 1631

時間限制: 2 sec 記憶體限制: 1024 mb

題目描述

小路綾 (komichi aya) 想要給陽子 (inokuma youko) 做便當。

小路綾現在有n

nn種食材,編號從1

11到n

nn,她會按編號順序放入這n

nn種食材。

對於每種食材陽子有乙個美味度a

ia_i

ai​。

小路綾知道,對於所有1⩽i

⩽n

1 \leqslant i \leqslant n

1⩽i⩽

n,設前i種食材的美味度總和

s i=

∑j=1

ia

js_ = \sum_^ a_

si​=j=

1∑i​

aj​

當加入第i

ii種食材時,如果s

i>

ms_i>m

si​>

m,陽子就會吃撐。

所以小路綾每放入一種食材時,都會想知道:最少要從之前已經選過的食材中去掉多少食材,才不會讓陽子吃撐。

當然,小路綾不會真正地把食材去掉,她只是想知道結果而已。才不是關心你呢!

輸入

第一行為兩個正整數n,m

n,mn,

m,分別表示食材的種類數以及會使陽子吃撐的值mmm。

接下來為一行n

nn個正整數,其中第i個正整數表示a

ia_i

ai​。

輸出

輸出一行n

nn個非負整數,其中第i

ii個非負整數表示在加入第i

ii種食材時,至少要去掉之前加入的多少種食材才能不讓陽子吃撐。

樣例輸入

【樣例1】

7151

2345

67

【樣例2】

5

10080

4040

4060

樣例輸出

【樣例1】

000

0023

【樣例2】

011

23

提示

對於100

%100\%

100%

的資料 1⩽n

⩽106

1⩽m⩽

1091

⩽ai⩽

m1 \leqslant n \leqslant 10^ \quad 1 \leqslant m \leqslant 10^ \quad 1 \leqslant a_ \leqslant m

1⩽n⩽10

61⩽m

⩽109

1⩽ai

​⩽m

解體思路

最簡單的思路應該是新增i

ii時,在i−1

i-1i−

1挑出最大的幾個數使得字首和s

i<=m

s_i<=m

si​<=m

先離散化,用樹狀陣列維護ck表

示在

c_表示在

ck​表示在

1

11到i−1

i-1i−

1中前k

kk小的和,最後用二分查詢最大的k使得ck+

a[i]

⩽m

c_k+a[i] \leqslant m

ck​+a[

i]⩽m

,統計1

11到k

kk中有多少個數就行了,最後的答案就是i−1

−num

i-1-num

i−1−nu

m(num表示1

11到k

kk中有多少個數)。

#include

#include

#include

using

namespace std;

const

int maxn=

1e6+10;

typedef

long

long ll;

struct node a[maxn+10]

;bool

cmp1

(const node &a,

const node &b)

bool

cmp2

(const node &a,

const node &b)

struct bit

} ll ask1

(int x)

return res;

} ll ask2

(int x)

return res;

}}b;

int n,m;

void

work

(int i)

else r = mid -1;

}printf

("%d"

, i - b.

ask2

(res)-1

);}void

work()

sort

(a +

1, a +

1+ n, cmp1)

;for

(int i =

1; i <= n; i++

)sort

(a +

1, a +

1+ n, cmp2)

;for

(int i =

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

intmain()

洛谷 P4964 綾小路的特別考試 解題報告

這世界上 勝利 便是一切。無關乎過程。要付出多少犧牲都無所謂。只要最後我 勝出 那就行了。一場新的特別考試來臨了,這次的考試內容是 wan e de 文化課,但有所不同的是,考試中允許學生使用對講機。然而,對講機的接收範圍有限 每個對講機都能傳送無限遠,但是只能接收到接收範圍內的訊號 所以,需要周密...