二分,前缀和,结构体排序

立希喂猫

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;
}
全部评论

相关推荐

哞客37422655...:你猜为什么福利这么好还得一直追着你问
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务