Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool lft(ld x, ld R){
- ll l, r, m;
- l = 1; r = n;
- while(r - l > 1){
- m = (r + l) / 2;
- if(arr[m] >= x){
- r = m;
- }else{
- l = m;
- }
- }
- ld u = x - R;
- if(u > arr[l]){
- return false;
- }
- for(int i = l; i >= 2; i--){
- if(arr[i - 1] < u){
- R = R - 1.0;
- u = arr[i] - R;
- if(arr[i - 1] < u){
- return false;
- }
- }
- }
- return true;
- }
- bool right(ld x, ld R){
- ll l, r, m;
- l = 1; r = n;
- while(r - l > 1){
- m = (r + l) / 2;
- if(arr[m] >= x){
- r = m;
- }else{
- l = m;
- }
- }
- ld u = x + R;
- if(u < arr[l]){
- return false;
- }
- for(int i = l; i <= n - 1; i++){
- if(arr[i + 1] > u){
- R = R - 1.0;
- u = arr[i] + R;
- if(arr[i + 1] > u){
- return false;
- }
- }
- }
- return true;
- }
- bool check(ld R){
- ld l = 0, r = arr[n], m;
- m = (l + r) / 2;
- if(!lft(m, R) && !right(m, R)){
- return false;
- }
- for(int i = 1; i <= 50; i++){
- m = (l + r) / 2;
- if(right(m, R)){
- r = m;
- }else{
- l = m;
- }
- }
- if(lft(l, R) && right(r, R)){
- return true;
- }else{
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement