Mai intai trebuie sa te autentifici.
Cod sursa(job #3366973)
| Utilizator | 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;
}
