bzoj2131 免費的餡餅

2022-04-29 22:24:16 字數 1140 閱讀 5559

首先我們很容易看出是乙個dp

然後容易看出是資料結構優化dp

但是這個限制條件有點鬼畜:

abs(p[i]-p[j])/2<=(t[i]-t[j])

p[i]>p[j] -> 

t[i]*2-p[i]>=t[j]*2-p[j]

p[i]

t[i]*2+p[i]>=t[j]*2+p[j]

這樣的話我只會樹套樹(後來想想帶修主席樹應該也行?)。。。。。信仰不夠去%題解

結果發現這兩個東西是可以放在一起的,也就是說如果滿足p[i]>p[j]和t[i]*2-p[i]>=t[j]*2-p[j]那t[i]*2+p[i]>=t[j]*2+p[j]也滿足(好像很顯然啊是我柿子畫得太醜看不出來嗎)

就成了水水的二維偏序了。。。

#include#include

#include

#include

#include

#include

using

namespace

std;

int s[110000

];int lowbit(int x)

void change(int x,intk)}

int getmax(int

x)

return

ret;

}struct nodea[110000

];bool cmp(node n1,node n2)

int lslen,ls[110000

];int

main()

sort(a+1,a+n+1

,cmp);

sort(ls+1,ls+lslen+1

); lslen=unique(ls+1,ls+lslen+1)-ls-1

;

for(int i=1;i<=n;i++)

a[i].w2=lower_bound(ls+1,ls+lslen+1,a[i].w2)-ls;

for(int i=1;i<=n;i++)change(a[i].w2,getmax(a[i].w2)+a[i].v);

printf(

"%d\n

",getmax(lslen));

return0;

}

bzoj2131 免費的餡餅

智障一般的操作,拆絕對值都忘了。數學沒救了。最後貌似是用的幾何意義推出來的。轉移的條件是 t i t j 並且abs p i p j 2 t i t j 顯然前面那個可以不考慮。然後你把每個狀態看作乙個二維平面上的點nd i 2 t i p i 移向不難發現 nd i 能夠轉移的點就是y x,y x...

bzoj 2131 免費的餡餅

易得方程 f i max f j v i 條件是 t i 一共有 3 個條件,但是你發現如果滿足後面兩個條件,自然滿足第乙個條件.所以可以將問題轉化為乙個二位偏序問題,離線 樹狀陣列處理一下即可.code include define n 100007 define ll long long usi...

bzoj 2131 免費的餡餅

易得方程 f i max f j v i 條件是 t i 一共有 3 個條件,但是你發現如果滿足後面兩個條件,自然滿足第乙個條件.所以可以將問題轉化為乙個二位偏序問題,離線 樹狀陣列處理一下即可.code include define n 100007 define ll long long usi...