求,悬关
  • 板块灌水区
  • 楼主3Luby3
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/7/14 20:38
  • 上次更新2024/7/14 22:16:13
查看原帖
求,悬关
965292
3Luby3楼主2024/7/14 20:38

求求

有好心人能帮我分析一下这个暴力的时间复杂度和二分答案的时间复杂度吗

暴力:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000001],n,m,maxn=-1e18;
bool check(int x){
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]>=x){
			ans+=a[i]-x;
		}
	}
	if(ans>=m) return 1;
	else return 0;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		maxn=max(maxn,a[i]);
	}
	for(int i=0;i<=maxn;i++){
		if(check(i)){
			continue;
		}else{
			cout<<i-1;
			return 0; 
		}
	}
}

二分答案:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000001],n,m,maxn=-1e18;
bool check(int x){
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]>=x){
			ans+=a[i]-x;
		}
	}
	if(ans>=m) return 1;
	else return 0;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		maxn=max(maxn,a[i]);
	}
	int l=-1,r=maxn+1;
	while(l+1<r){
		int mid=(l+r)/2;
		if(check(mid)){
			l=mid;
		}
		else r=mid;
	}
	cout<<l;
}

数据范围:

对于 100%100\% 的测试数据,1≤N≤1061\le N\le10^6,1≤M≤2×1091\le M\le2\times10^9,树的高度 ≤4×105\le 4\times 10^5,所有树的高度总和 >M>M。

dalao们也别说啥了,我就是个蒟蒻

2024/7/14 20:38
加载中...