Submission #566833

#TimeUsernameProblemLanguageResultExecution timeMemory
566833indBalloons (CEOI11_bal)C++14
90 / 100
671 ms8068 KiB
#include <bits/stdc++.h>

using namespace std;

void compare(int position1, double radius1, int position2, double &radius2) {
  double current = (double)(position2 - position1) * (double)(position2 - position1) / (4 * radius1);
  if (radius2 - current >= 0.001) radius2 = current;
}

int main() {
  int n;
  cin >> n;
  vector<int> positions(n);
  vector<double> radii(n);
  stack<int> indexes;
  for (int i=0; i<n; i++) {
    cin >> positions[i];
    double radius;
    cin >> radius;
    while (indexes.size() > 0) {
      compare(positions[indexes.top()], radii[indexes.top()], positions[i], radius);
      bool needBreak = radii[indexes.top()] - radius >= 0;
      if (needBreak) break;
      indexes.pop();
    }
    indexes.push(i);
    cout << fixed << setprecision(3);
    cout << radius << endl;
    radii[i] = radius;
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...