夏天又到了,奶牛貝里斯開始變得非常懶惰。他想要站在乙個地方,然後只走很少的一段路,就能吃到盡可能多的美味的青草。
有n塊草坪排列在一條直線上,第i個草坪擁有g_i數量的青草,第i個草坪所在的位置是x_i。奶牛貝里斯想要在直線上選擇乙個點作為他的初始點(初始點有可能和草坪的位置重合),這樣他就能吃到以這個點為中點距離不超過k的位置上的所有青草。
如果初始點可以自由選擇的話,請幫助貝里斯計算他最多能吃到的青草的數量。
第一行是兩個正整數,表示n和k。
第2行到第n+1行,每行兩個整數,第i行的兩個整數表示第i個草坪的g_i和x_i。
輸出貝里斯最多能吃到的青草數量。
4 34 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 #include2using
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...