P2672 推销员

题目传送门:P2672 推销员

思路:

树状数组+路径压缩优化一下

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=100010; int n;
int qm[N]; int h[N],q[N]; struct no { int s; int v; } a[N]; bool cmp(no a,no b) { return a.v>b.v; } int main () { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i].s); for(int i=1; i<=n; i++) scanf("%d",&a[i].v); sort(a+1,a+1+n,cmp); for(int i=n; i>=1; i--) h[i]=max(h[i+1],2*a[i].s+a[i].v); for(int i=1; i<=n; i++) qm[i]=max(qm[i-1],a[i].s); for(int i=1; i<=n; i++) q[i]=q[i-1]+a[i].v; for(int i=1; i<=n; i++) printf("%d\n",max(q[i-1]+h[i],q[i]+2*qm[i])); return 0; }

 

posted @ 2019-08-08 00:46  双子最可爱啦  阅读(144)  评论(0编辑  收藏  举报