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; }