为什么这样写的二分会T
查看原帖
为什么这样写的二分会T
603322
qingche_楼主2023/6/5 22:02
#include<iostream>
#include<cstring>
#include<algorithm>

typedef long long LL;

using namespace std;

const int N = 2e5+5;

int n;
LL m;
int a[N], b[N];

bool check(int x){
	LL sum=0;
	for(int i=0;i<n;i++){
	    int gap = x-a[i];
		if(gap>b[i]) return false;
		sum+=max(x-a[i],0);
	}
	return (sum<=m)?true:false;
}

int main(){
	cin>>n>>m;
	int l = 0x3f3f3f3f, r = 0;
	for(int i=0;i<n;i++) {
		scanf("%d", &a[i]);
		l = min(l,a[i]);
	}
	for(int i=0;i<n;i++) {
		scanf("%d", &b[i]);
		r = max(r,b[i]+a[i]);
	}
	
	while(l<r){
		int mid = l+r>>1;
		if(check(mid)) l = mid;
		else r = mid-1;
	}
	
	cout<<r;
	
	
	return 0;
}
2023/6/5 22:02
加载中...