题:https://www.cometoj.com/problem/0221
#include#include #include #include #include using namespace std;const int M=1e5+5;struct node{ int len,id,a; bool operator<(const node &b)const{ return 2*len+a que;int S[M];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&S[i]); } for(int i=1;i<=n;i++){ int x; scanf("%d",&x); node p; p.id=i; p.len=S[i]; p.a=x; que.push(p); } int ans=0ll,nowlen=0;; for(int i=1;i<=n;i++){ node p; while(!que.empty()&&max(S[que.top().id]-nowlen,0) nowlen){ ans+=(S[p.id]-nowlen)*2; nowlen=S[p.id]; } ans+=p.a; printf("%d\n",ans); } return 0;}