求助!不知道哪错了。
  • 板块学术版
  • 楼主_shy
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/10/26 07:48
  • 上次更新2023/11/5 09:51:46
查看原帖
求助!不知道哪错了。
183881
_shy楼主2020/10/26 07:48

砍树

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;
/*inline int read () // inline long long
{
	int s = 0, w = 1; char ch = getchar (); // long long s
	while (ch < '0' || ch > '9') {if (ch == '-') w = -1; ch = getchar ();} while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar ();
	return s * w;
}*/
const int maxn = 1000005;
long long n, m, h[maxn], ma;
long long tot;
long long f (long long l, long long r)
{
	if (l == r) return l;
	long long mid = (l + r) >> 1;
	tot = 0;
	for (int i = 1; i <= n ; i++) if (mid < h[i]) tot += h[i] - mid;
	if (tot == m) return mid;
	if (tot > m) f (mid + 1, r); else f (l, mid); 
}
int main ()
{
	//freopen (".in", "r", stdin); freopen (".out", "w", stdout);
	scanf ("%lld %lld", &n, &m); 
	for (int i = 1; i <= n; i++) scanf ("%lld", &h[i]), ma = max (ma, h[i]);
	printf ("%lld", f (0, ma));
	return 0;
}

2020/10/26 07:48
加载中...