Cod sursa(job #1706265)

Utilizator Bodo171Bogdan Pop Bodo171 Data 21 mai 2016 23:52:52
Problema Secventa 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#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;
}