#include #include using namespace std; int main(int argc, char** argv) { ios::sync_with_stdio(false); int N; double speed; int p; cout << fixed << setprecision(32); while(cin >> N >> speed) { vector ponds(N, 0); vector naslednik(N, 0), predchudce(N, 0); vector nextEvent(N), speeds(N); vector visited(N, false); set< pair > pq; for(int i = 0; i < N ; ++i) { cin >> p; ponds[i] = p; pq.insert(pair(p / speed, i)); nextEvent[i] = p / speed; speeds[i] = speed; naslednik[i] = i+1; predchudce[i] = i-1; } naslednik[N-1] = -1; predchudce[0] = -1; double ans2; double time = 0; while(!pq.empty()) { // int u = pq.top().second; double v = pq.top().first; // pq.pop(); int u = pq.begin()->second; double v = pq.begin()->first; pq.erase(pq.begin()); if (visited[u]) continue; visited[u] = true; // cout << "Jezero: " << u << "Cas: " << v << endl; time = v; if (u == N-1) ans2 = time; else { if (predchudce[u] != -1) naslednik[predchudce[u]]=naslednik[u]; if (naslednik[u] != -1) { double next = time + ((nextEvent[naslednik[u]] - time)*speeds[naslednik[u]]) / (speeds[u] + speeds[naslednik[u]]); speeds[naslednik[u]] += speeds[u]; nextEvent[naslednik[u]] = next; pq.insert(pair(next, naslednik[u])); } } } cout << ans2 << " " << time << endl; } return 0; }