WA on #2求助
查看原帖
WA on #2求助
941228
mdxz114514楼主2024/8/3 16:48
#include<bits/stdc++.h>
using namespace std;
int T,n,x,maxs,mins;
long long arr[200005]={0},sum[200005]={0};
int erf(int il,int ir){
	int l=il,r=ir;
	while(l+1<r){
		int mid=(l+r)>>1;
		//cout<<l<<' '<<r<<' '<<'\n';
		if(mid>maxs)r=mid;
		else if(mid<mins)l=mid;
		else if(sum[mid]<=x)l=mid;
		else r=mid;
	}return l;
}
int main(){
	cin>>T;
	while(T--){
		maxs=0;
		mins=11451419;
		cin>>n>>x;
		while(n--){
			int a;
			cin>>a;
			mins=min(mins,a);
			maxs=max(maxs,a);
			arr[a+1]++;
		}
		for(int i=mins+1;i<=maxs+1;i++){
			arr[i]+=arr[i-1];
			//cout<<arr[i]<<' ';
			sum[i]=sum[i-1]+arr[i];
		}//cout<<'\n';
		/*for(int i=mins;i<=maxs+1;i++)cout<<sum[i]<<' ';
		cout<<'\n';*/
		if(sum[maxs+1]<x){
			cout<<(x-sum[maxs])/arr[maxs+1]+maxs<<'\n';
			for(int i=mins;i<=maxs+1;i++){
				arr[i]=0;
			}
			continue;
		}
		for(int i=mins;i<=maxs+1;i++){
			arr[i]=0;
		}
		cout<<erf(mins,100000000)<<'\n';
	}
}
2024/8/3 16:48
加载中...