15/70 请大佬帮忙,谢谢。
查看原帖
15/70 请大佬帮忙,谢谢。
726902
bcbgszyzh楼主2023/9/29 21:52

(本程序请无关者不要回复,比如@bcbgszyzhdtzh0001)


code: (C++14 (GCC 9) O2)

#include<bits/stdc++.h>
using namespace std;
int k[100010],qz[100010];
int main(){
	int n,q;
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;++i)scanf("%d",&k[i]);
    sort(k+1,k+n+1);
    for(int i=1;i<=n;++i)qz[i]=qz[i-1]+k[i];
    for(int i=1;i<=q;++i){
        int p,m;
        scanf("%d%d",&p,&m);
        int x=upper_bound(k+1,k+n+1,p)-k;
        int l=0,r=min(x-1,m);
        while(l<r){
            int mid=(l+r+1)/2;
            int y=lower_bound(k+1,k+n+1,2*p-k[mid])-k;
            int gs=n-y+1;
            if(gs+mid<=m){
                l=mid;
            }else{
                r=mid-1;
            }
        }
        long long ans=qz[l];
        ans+=2ll*p*(m-l)-(qz[n]-qz[n-(m-l)]);
        printf("%lld\n",ans);
    }
	return 0;
}
2023/9/29 21:52
加载中...