二分,前缀和,结构体排序
立希喂猫
https://ac.nowcoder.com/acm/contest/84444/E
using namespace std;
typedef long long ll;
const int N=100010;
ll n,q;
ll pre[N],suf[N];
struct stu{
ll a,b;
}c[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>c[i].a;
for(int i=1;i<=n;i++) cin>>c[i].b;
sort(c+1,c+n+1,[&](stu x,stu y){
return x.b<y.b;
});
pre[0]=suf[n+1]=0;
for(int i=1;i<=n;i++) pre[i]=pre[i-1]+c[i].a*c[i].b;
for(int i=n;i>=1;i--) suf[i]=suf[i+1]+c[i].a;
cin>>q;
while(q--){
ll l=0,r=n,k;
cin>>k;
while(l<r){
ll mid=(l+r+1)/2;
if(k>=c[mid].b) l=mid;
else r=mid-1;
}
cout<<pre[l]+suf[l+1]*k<<endl;
}
return 0;
}
文远知行公司福利 555人发布
