C. Slay the Dragon(二分

添加链接描述
二分查找 要注意不一定是小于等于的情况 要考虑大于的是否完全满足

#include
using namespace std;
const int N=2e5+9;
typedef long long ll;
ll arr[N];
ll sum=0;
int T,n;
int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",&arr[i]);sum+=arr[i];}sort(arr+1,arr+1+n);int T;scanf("%d",&T);while(T--){ll x,y;scanf("%lld%lld",&x,&y);int l=1,r=n;while(l<r){int mid=l+r+1>>1;if(arr[mid]<=x)l=mid;else r=mid-1;}ll ans=0;//cout<<"---"<if(x>arr[l])ans+=x-arr[l];if(y>sum-arr[l])ans+=y-sum+arr[l];if(l<n){ll mi=0;if(x>arr[l+1])mi+=x-arr[l+1];if(y>sum-arr[l+1])mi+=y-sum+arr[l+1];ans=min(ans,mi);}printf("%lld\n",ans);}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部