有没有dalao帮忙看一下为什么会RE?
查看原帖
有没有dalao帮忙看一下为什么会RE?
612641
UnrulyHayato楼主2022/9/23 09:04
#include<iostream>
#include<cmath>
#define ll long long
#define fo(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
template<typename T>inline void in(T &x){
	x=0;int f=0;char c=getchar();
	for(;!isdigit(c);c=getchar())f|=(c=='-');
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	x=f?-x:x;
}
template<typename T>inline void out(T x){
	if(x<0)x=~x+1,putchar('-');
	if(x>9)out(x/10);
	putchar(x%10^48);
}
const int N=500005;
ll n,k;
ll m[N];
ll l,r,mid;
ll dp[N];
ll t,kp;
inline bool check(ll p){
	t=0;
	fo(i,1,n)dp[i]=m[i];
	for(int i=n;i>=1;--i){
		if(dp[i]<0)continue;
		++t;
		dp[i]-=p;
		kp=i-sqrt(p);
		fo(j,kp,i-1)dp[j]-=p-pow(i-j,2);
		if(dp[i]>0||t>k)return 0;
	}
	return 1;
}
int main(){
	in(n),in(k);
	fo(i,1,n)in(m[i]);
	l=0,r=5e15;
	while(l<r){
		mid=(l+r)>>1;
		if(check(mid))r=mid;
		else l=mid+1;
	}
	out(r);
	return 0;
}
2022/9/23 09:04
加载中...