#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<deque>
#include<queue>
using namespace std;
typedef long long ll;
template<typename T>
T ABS(T n)
{
return n>0?n:-n;
}
const int maxn = 111111;
const ll INF = (1ll<<62);
int a[maxn];
ll sum[maxn],s[maxn];
ll dp[11][maxn];
ll t[maxn];
int n,M,L,R;
void output(ll a[])
{
for(int i=1;i<=n;++i)
{
printf("%lld ",a[i]);
}
puts("");
}
ll DP(ll rate)
{
int i,j,k;
for(j=0;j<=M;++j)
for(i=0;i<=n;++i)
dp[j][i]=j?-INF:0;
for(i=1;i<=n;++i) t[i]=sum[i]*100-rate*i;
//output(t);
int p;
ll ans=-INF;
//int lhs,rhs;
for(j=1;j<=M;++j)
{
deque<int>q;
for(i=L;i<=n;++i)
{
p=i-L;
while(!q.empty()&&i-q.front()>R) q.pop_front();
while(!q.empty())
{
k=q.back();
if(dp[j-1][k]-t[k]<dp[j-1][p]-t[p])
q.pop_back();
else
break;
}
q.push_back(p);
dp[j][i]=dp[j][i-1];
if(!q.empty())
{
k=q.front();
dp[j][i]=max(dp[j][i],dp[j-1][k]+t[i]-t[k]);
//printf("dp[%d][%d]=%lld %d %lld\n",j,i,dp[j][i],k,t[i]-t[k]);
}
}
}
for(i=1;i<=n;++i) ans=max(ans,dp[M][i]);
//cout<<"==========="<<endl;
//cout<<rate<<endl;
//cout<<"a "<<ans<<endl<<endl;
return ans;
}
void solve()
{
int i;
ll l=INF,r=-INF,m;
ll ans=0,tmp;
for(i=1;i<=n;++i)
{
scanf("%d",a+i);
}
if(L*M>n)
{
puts("-1");
return;
}
//DP(0);
for(i=1;i<=n;++i)
{
l=min(100ll*a[i],l);
r=max(100ll*a[i],r);
sum[i]=sum[i-1]+a[i];
}
//cout<<sum[n]<<endl;
ll x,y;
//ll delta=INF;
while(l<=r)
{
m=(l+r)>>1;
tmp=DP(m);
if(tmp>=0)
{
ans=m;
l=m+1;
}
else if(tmp<=0)
{
//if(m<0) ans=m;
r=m-1;
}
}
x=ans/100,y=ans%100;
printf("%lld.%02lld\n",x,y>=0?y:-y);
}
int main()
{
//freopen("test.out","w",stdout);
while(~scanf("%d%d%d%d",&n,&M,&L,&R))
{
solve();
}
return 0;
}
/*
6 2 2 3
3 1 3 1 1 3
4 1 2 2
4 1 2 3
7 2 2 3
8 9 5 6 7 1 3
4 1 1 1
4 5 8 9
4 1 1 1
-1 -2 -10 -11
2 1 2 2
-10 -11
8 2 2 5
1 4 7 -1 9 10 -2 5
14 3 2 6
8 9 10 10 10 10 10
8 9 5 50 51 52 53
7 2 2 6
8 9 10 10 10 10 10
7 2 2 6
8 9 10 10 10 10 10
14 3 2 6
8 9 10 10 10 10 10
8 9 5 50 51 52 53
8 4 1 5
4 7 -8 89
4 7 8 5
10 2 3 5
1 7 89 2 3
11 54 65 74 85
10 3 3 5
1 7 89 2 3
11 54 65 74 85
8 2 3 5
-1 -7 8 -2
-5 -6 -74 -85
*/
ZOJ Problem Set - 3694
最新推荐文章于 2013-11-12 20:27:09 发布