usaco2013 mar 懶惰的奶牛

2022-07-30 05:45:12 字數 1092 閱讀 2437

夏天又到了,奶牛貝里斯開始變得非常懶惰。他想要站在乙個地方,然後只走很少的一段路,就能吃到盡可能多的美味的青草。

有n塊草坪排列在一條直線上,第i個草坪擁有g_i數量的青草,第i個草坪所在的位置是x_i。奶牛貝里斯想要在直線上選擇乙個點作為他的初始點(初始點有可能和草坪的位置重合),這樣他就能吃到以這個點為中點距離不超過k的位置上的所有青草。

如果初始點可以自由選擇的話,請幫助貝里斯計算他最多能吃到的青草的數量。

第一行是兩個正整數,表示n和k。

第2行到第n+1行,每行兩個整數,第i行的兩個整數表示第i個草坪的g_i和x_i。

輸出貝里斯最多能吃到的青草數量。

4 3

4 710 15

2 25 1

11

如果貝里斯將初始點選擇在x=4的位置,那麼他可以吃到x=1,x=2和x=7這三個地方的青草,總共是11。

1<=n<=100000,1<=g_i<=10000,0<=x_i<=1000000,1<=k<=2000000。

剛開始我想用字首和,然後每次列舉區間比較最大值,但是我最後還是用的類似於佇列的東西來做(因為老師強制性),每次用乙個左端點和右端點移動就行。

1 #include2

using

namespace

std;

3int

n,k,maxn,ans;

4int mp[5000001];//

存青草地的

5int read()//

快讀 6

14while(ch>='

0'&&ch<='9'

)18return x*f;19}

20int

main()

2131

int l=0,r=k,ans=0;//

l一定要從0開始,我之前乙個多小時wa就是因為它

32for(int i=l;i<=r;i++)

3336 maxn=max(maxn,ans);

37while(r<=5000001)//

因為不知道大小,只能硬列舉

3845 cout輸出 46 }

USACO08MAR 土地購買

點此看題 首先考慮如果有乙個塊長和寬都比另乙個塊要小,那麼這個塊就沒有存在的意義了,我們可以先排序 長為第一關鍵字,寬為第二關鍵字,從小到大 然後從後往前掃,期間維護寬的最大值,如果最大值不比當前寬小,那麼這個塊沒用,我們去除完沒用的點之後再排一遍序 方法一樣 這樣就可以愉快的dpdp dp了,設d...

Usaco2008 Mar 土地購買

此題依舊是斜率優化。感覺自己做斜率優化做瘋了 滑稽 還是與先前一樣弄出dp式 這裡要著重說明一下 這裡的x,y都已經是排過序並整理了的!我們先按照x為第一關鍵字,y為第二關鍵字來從小到大 both 排序。隨後,我們發現它的y不滿足單調性。所以我們應當將其轉換一下。這樣子,我們就可以斜率優化了。設k上...

USACO12MAR 花盆(單調佇列)

有n個點 x,y 求乙個在 x 軸上的最小區間,使得它包含的所有點中的 y 的極差至少為 d x,y,d leq 10 6 將點按 x 排序,顯然 2 pointers 需要隨時維護乙個滑動視窗的最大值和最小值,顯然單調佇列 也可以用離散化 st表或者線段樹,不過多了個log include def...