Pagini recente » Monitorul de evaluare | Cod sursa (job #1345036) | Istoria paginii runda/oni_2009_11-12_2/clasament | Cod sursa (job #166486) | Cod sursa (job #1706265)
#include <iostream>
#include<fstream>
#include<deque>
using namespace std;
deque<int> d;
int n,i,k,l,umm;
long long a[30005],b[30005],v[30005],minim[30005],p,m,u;
bool check(int x)
{
for(i=1;i<=n;i++)
{
v[i]=v[i-1]+a[i]-x*b[i];
}
for(i=1;i<=n;i++)
{
if(!d.empty()&&i-d.front()>=k+1) d.pop_front();
while(!d.empty()&&v[i]<=v[d.back()])
{
d.pop_back();
}
d.push_back(i);
minim[i]=v[d.front()];
}
d.clear();
if(k==0) for(i=1;i<=n;i++) minim[i]=v[i];
long long mx=-(1<<30);
for(i=l;i<=n;i++)
{
if(v[i]-minim[i-l]>=0)
{return 1;}
if(i<=umm&&v[i]>=0) return 1;
}
return 0;
}
inline void binsearch()
{
p=0;u=100001;
while(u-p>1)
{
m=(p+u)/2;
if(check(m)) p=m;
else u=m;
}
}
int main()
{
ifstream f("secv3.in");
ofstream g("secv3.out");
f>>n>>l>>umm;
k=umm-l;
for(i=1;i<=n;i++)
{
f>>a[i];
a[i]*=100;
}
for(i=1;i<=n;i++)
{
f>>b[i];
}
binsearch();
float rasp=u;
rasp/=100;
rasp-=0.01;
g<<rasp;
return 0;
}