2118 簽到題(二分 差分)

2021-09-23 17:19:00 字數 1395 閱讀 7424

2118: 簽到題

時間限制: 1 sec 記憶體限制: 128 mb

提交: 54 解決: 22

[提交] [狀態] [討論版] [命題人:admin]

題目描述

作為acm集訓隊一員的你,有一天拿到了你的歷史訓練時長記錄表。你當然是想讓你的訓練時長看起來好看一些,所以你想調整這份記錄表,使得訓練時長最少的一天的時間在所有可能的調整方案中最大。你還有m分鐘就夢醒了,時間緊迫,你每一分鐘可以使得連續的w天時長記錄多乙個單位時間。注意,在夢中,你不需要考慮一天有多少的時間限制。 輸出經過你的調整,最小的時長。(睡醒前的答案)

輸入多組資料,第一行為乙個整數t,表示資料組數(t<=10) 接下來每組資料,開頭為n,m,w(1<=w , n<=100000, 0<=m <= 1000000),表示有記錄的歷史訓練天數 接下來一行n個數,表示這一天你的簽到時長t(0<=t<=1000000)

輸出輸出t行,每行代表一組的答案。

樣例輸入

13 2 1

2 1 2

樣例輸出

二分答案,差分檢查。

#include

#define fi first

#define se second

#define log2(a) log(n)/log(2)

#define show(a) cout<#define show2(a,b) cout<#define show3(a,b,c) cout<#define tim printf("time cost : %lf s\n",(double)clock()/clocks_per_sec);

using namespace std;

typedef

long

long ll;

typedef pair p;

typedef pair lp;

const ll inf =

0x3f3f3f3f

;const

int n =

2e5+10;

const ll mod =

1e12

;const ll p=

1e6;

const

int base=

131;

const

double pi=

acos(-

1);int a[n]

,n,rm,w,m;

int num[n]

;bool check

(int x)

}return m>=0?

1:0;

}int

main()

else r=mid-1;

}printf

("%d\n"

,ans);}

}

二分 差分 思維

二分 差分 思維 當猜了乙個數 x 總共有三種情況 裁判說數大了,那麼裁判說對的取值範圍是 x 裁判說數小了,那麼裁判說對的取值範圍是 x,裁判說數一樣,那麼裁判說對的取值範圍是 x,x 那麼我們只需要求最大有多少個區間重疊了就行了,問題就轉化成了區間的修改,單點查詢,可以考慮差分了。注意題目資料 ...

金牌廚師(二分 差分)

乙個廚師可以做出辣度範圍是 1,n 的菜。現在有 m 個同學,每個同學可以接受的辣度範圍是 l i,r i 廚師每天會選擇一部分同學,做出讓他們都滿意的菜。滿意程度定義為選出的同學的人數 k 和能讓這部分同學都接受的菜的種類數 x 這裡理解為一種辣度對應一種菜 兩者中的最小值,即 min k,x 求...

二分入門題

在乙個遞增的序列裡,查詢元素是否存在,若存在輸出yes,不存在輸出no.本題多組資料,首先輸入乙個數字n,然後輸入n個數,資料保證數列遞增,然後再輸入乙個查詢數字。若存在輸出yes,不存在輸出no.4 1 3 5 8 3 yes include include includeusing namesp...