Cod sursa(job #3366973)

Utilizator RosaSofian Rosa Rosa Data 5 octombrie 2026 15:42:18
Problema Secventa 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <deque>
#include <iomanip>
using namespace std;

//ifstream cin("secv3.in");
//ofstream cout("secv3.out");

using db= double;
const int dim= 3e4+ 5;
int a[dim], b[dim];
db v[dim];
deque <int> d;

bool solve(db x, int l, int r, int n){
    for(int i= 1;i <= n;i++)
        v[i]= a[i]- x* b[i];
    for(int i= 1;i <= n;i++)
        cout << v[i]<<" ";
    cout << endl;
    for(int i= l;i <= n;i++){
        while(!d.empty() and v[d.back()] > v[i- l])
            d.pop_back();
        d.push_back(i- l);
        cout << v[d.front()]<< " ";
        if(v[i] >= v[d.front()])return true;
        while(!d.empty() and d.front() <= i- r+ 1)
            d.pop_front();
    }
    cout << endl;
    return false;
}

int main()
{
    int i, j, n, l, r;
    cin >> n>> l>> r;

    for(i= 1;i <= n;i++)
        cin >> a[i], a[i]+= a[i- 1];
    for(i= 1;i <= n;i++)
        cin >> b[i], b[i]+= b[i- 1];

    db st= 0, dr= 0.83;//3* 1e7+ 5;
    db dif= 0.001, rez= 0;
    while(dr- st > dif){
        db mij= (st+ dr)/ 2;
        int ok= solve(mij, l, r, n);

        if(ok== 1){
            rez= mij;
            st= mij+ 1;
        }
        else dr= mij- 1;
    }
    cout << endl;
    cout << fixed<< setprecision(2)<< rez;

    return 0;
}