日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客练习赛59 小松鼠吃松果(优化dp二维偏序)

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客练习赛59 小松鼠吃松果(优化dp二维偏序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小松鼠吃松果

非常nicenicenice的一道題

首先考慮dpdpdp

容易想到按照時間來排序

然后定義dp[i]dp[i]dp[i]為考慮前iii個果子且吃掉第iii個的最大價值

那么每次都去前面枚舉一個jjj使得吃完jjj還可以來吃iii

吃完jjj還能吃iii有什么條件呢??

ti?tj>=abs(posi?posj)t_i-t_j>=abs(pos_i-pos_j)ti??tj?>=abs(posi??posj?)

當posi>=posj,ti?posi>=tj?posj當pos_i>=pos_j,t_i-pos_i>=t_j-pos_jposi?>=posj?,ti??posi?>=tj??posj?

當posi<posj,ti+posi>=tj+posj當pos_i<pos_j,t_i+pos_i>=t_j+pos_jposi?<posj?,ti?+posi?>=tj?+posj?

用樹狀數組維護即可

#include <bits/stdc++.h> using namespace std; #define int long long const int maxn=2e5+10; int pos[maxn],b[maxn],ls[maxn],sumn[maxn],n,m; struct node{int t,id,val;bool operator < (const node&tmp ) const{return t==tmp.t?id<tmp.id:t<tmp.t;//優先按照x來排序 } }a[maxn]; int lowbit(int x){ return x&(-x); } int query(int x) {int ans=0;for(;x;x-=lowbit(x)) ans = max( ans,sumn[x] );return ans; } void add(int x,int v) {for(;x<=n;x+=lowbit(x)) sumn[x]=max(sumn[x],v); } signed main() {cin >> n >> m;for(int i=1;i<=m;i++) scanf("%d",&pos[i]),ls[i]=pos[i];for(int i=1;i<=m;i++) scanf("%d",&b[i]);for(int i=1;i<=n;i++)scanf("%d%d%d",&a[i].t,&a[i].id,&a[i].val),a[i].t+=b[a[i].id]; for(int i=1;i<=n;i++){int x=a[i].t-pos[a[i].id],y=a[i].t+pos[a[i].id];a[i].t=x,a[i].id=y; ls[i]=y;}sort(ls+1,ls+1+n);sort(a+1,a+1+n);int ans=0; for(int i=1;i<=n;i++){int now=lower_bound(ls+1,ls+1+n,a[i].id)-ls;int dp=query(now)+a[i].val;ans = max( ans,dp );add( now,dp );}cout << ans; }

總結

以上是生活随笔為你收集整理的牛客练习赛59 小松鼠吃松果(优化dp二维偏序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。