56 pts 求调 /kel 悬关
查看原帖
56 pts 求调 /kel 悬关
566910
bigsmart21楼主2024/11/25 22:12
#include<iostream>
#define int long long
using namespace std;
int a[214514],b[214514];
int n,m;
int check(int x){
	int sum = 0;
	for(int i=1;i<=n;i++){
		int sum1 = 0;
		if(x>=a[i]){
			sum1 = 1;
		}
		if(x>=a[i]+b[i]){
			for(int j=1;j<=x-(a[i]+b[i])+1;j++){
				sum1 *= 2;
				if(sum1 + sum > m){
					return 1e9+1;
				}
			}
		}
		sum += sum1;
	}	
	return sum;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}	
	int l = 1 ,r = 1e9;
	while(l<=r){
		int mid = (l + r) >> 1;
		int t = check(mid);
		if(t==m){
			cout<<mid;
			return 0;
		}
		if(check(mid)>m||t == -1){
			r = mid-1;
		} 
		else{
			l = mid+1;
		}
	}
	cout<<-1;
	return 0;
}

https://www.luogu.com.cn/record/191141199

2024/11/25 22:12
加载中...