#include <iostream>
#include <vector>
using namespace std;
#define MAXN 200000
int x[MAXN + 1], r[MAXN + 1], sta[MAXN + 1], st;
double ans[MAXN + 1];
int n;
int eps(double x) {
return x < -1e-10 ? -1 : x > 1e-10;
}
double sqr(double x) {
return x * x;
}
void downdate(double &a, double b){
return (void)((eps(a - b) > 0) ? (a = b) : 0);
}
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> x[i] >> r[i];
}
ans[sta[st = 1] = 1] = r[1];
for (int i = 2; i <= n; sta[++st] = i++) {
for (ans[i] = r[i]; st && (downdate(ans[i], sqr(x[i] - x[sta[st]])/(4.0 * ans[sta[st]])), eps(ans[i] - ans[sta[st]]) >= 0); --st);
}
for (int i = 1; i <= n; ++i) {
printf("%.3f\n", ans[i]);
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
10 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
2 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
332 KB |
505 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
312 KB |
2000 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
920 KB |
20000 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
69 ms |
2256 KB |
50000 numbers |
2 |
Correct |
57 ms |
2324 KB |
49912 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
117 ms |
4092 KB |
100000 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
152 ms |
4788 KB |
115362 numbers |
2 |
Correct |
139 ms |
5236 KB |
119971 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
6344 KB |
154271 numbers |
2 |
Correct |
239 ms |
8524 KB |
200000 numbers |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
219 ms |
7676 KB |
200000 numbers |
2 |
Correct |
229 ms |
8504 KB |
199945 numbers |