source_code: 					import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.util.HashMap;
  import java.util.InputMismatchException;
  public class Solution1 implements Runnable
  {
  	static final int MAX = 1000000007;
  	static class InputReader
  	{
  		private InputStream stream;
  		private byte[] buf = new byte[1024];
  		private int curChar;
  		private int numChars;
  		private SpaceCharFilter filter;
  		private BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  
  		public InputReader(InputStream stream)
  		{
  			this.stream = stream;
  		}
  		
  		public int read()
  		{
  			if (numChars==-1) 
  				throw new InputMismatchException();
  			
  			if (curChar >= numChars)
  			{
  				curChar = 0;
  				try 
  				{
  					numChars = stream.read(buf);
  				}
  				catch (IOException e)
  				{
  					throw new InputMismatchException();
  				}
  				
  				if(numChars <= 0)				
  					return -1;
  			}
  			return buf[curChar++];
  		}
  	 
  		public String nextLine()
  		{
  			String str = "";
              try
              {
                  str = br.readLine();
              }
              catch (IOException e)
              {
                  e.printStackTrace();
              }
              return str;
  		}
  		public int nextInt()
  		{
  			int c = read();
  			
  			while(isSpaceChar(c)) 
  				c = read();
  			
  			int sgn = 1;
  			
  			if (c == '-') 
  			{
  				sgn = -1;
  				c = read();
  			}
  			
  			int res = 0;
  			do 
  			{
  				if(c<'0'||c>'9') 
  					throw new InputMismatchException();
  				res *= 10;
  				res += c - '0';
  				c = read();
  			}
  			while (!isSpaceChar(c)); 
  			
  			return res * sgn;
  		}
  		
  		public long nextLong() 
  		{
  			int c = read();
  			while (isSpaceChar(c))
  				c = read();
  			int sgn = 1;
  			if (c == '-') 
  			{
  				sgn = -1;
  				c = read();
  			}
  			long res = 0;
  			
  			do 
  			{
  				if (c < '0' || c > '9')
  					throw new InputMismatchException();
  				res *= 10;
  				res += c - '0';
  				c = read();
  			}
  			while (!isSpaceChar(c));
  				return res * sgn;
  		}
  		
  		public double nextDouble() 
  		{
  			int c = read();
  			while (isSpaceChar(c))
  				c = read();
  			int sgn = 1;
  			if (c == '-') 
  			{
  				sgn = -1;
  				c = read();
  			}
  			double res = 0;
  			while (!isSpaceChar(c) && c != '.') 
  			{
  				if (c == 'e' || c == 'E')
  					return res * Math.pow(10, nextInt());
  				if (c < '0' || c > '9')
  					throw new InputMismatchException();
  				res *= 10;
  				res += c - '0';
  				c = read();
  			}
  			if (c == '.') 
  			{
  				c = read();
  				double m = 1;
  				while (!isSpaceChar(c)) 
  				{
  					if (c == 'e' || c == 'E')
  						return res * Math.pow(10, nextInt());
  					if (c < '0' || c > '9')
  						throw new InputMismatchException();
  					m /= 10;
  					res += (c - '0') * m;
  					c = read();
  				}
  			}
  			return res * sgn;
  		}
  		
  		public String readString() 
  		{
  			int c = read();
  			while (isSpaceChar(c))
  				c = read();
  			StringBuilder res = new StringBuilder();
  			do 
  			{
  				res.appendCodePoint(c);
  				c = read();
  			} 
  			while (!isSpaceChar(c));
  			
  			return res.toString();
  		}
  	 
  		public boolean isSpaceChar(int c) 
  		{
  			if (filter != null)
  				return filter.isSpaceChar(c);
  			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
  		}
  	 
  		public String next() 
  		{
  			return readString();
  		}
  		
  		public interface SpaceCharFilter 
  		{
  			public boolean isSpaceChar(int ch);
  		}
  	}
   	
  	public static void main(String args[]) throws Exception
  	{
  		new Thread(null, new Solution1(),"Solution1",1<<26).start();
  	}
  	public static int gcd(int a, int b)
      {
          if (a == 0)
              return b;
           
          return gcd(b%a, a);
      }
  	 
  	  static int lcm(int a, int b)
  	    {
  	        return (a*b)/gcd(a, b);
  	    }
  	static int max=  -1;
  	public void run()
  	{
  		InputReader sc= new InputReader(System.in);
  		PrintWriter w= new PrintWriter(System.out);
  		int n = sc.nextInt();
  		int r = sc.nextInt();
  		int[] arr=  new int[n];
  		for(int i = 0;i < n;i++){
  			arr[i] = sc.nextInt();
  		}
  		double sqr = 2*r*2*r;
  		double[] ans=  new double[n];
  		for(int i = 0;i < arr.length;i++){
  			ans[i] = r*1.0;
  			for(int j = 0;j < i;j++){
  				if(Math.abs(arr[i] - arr[j]) < 2*r){
  					ans[i] = Math.max(ans[i],Math.sqrt(sqr - Math.abs(arr[i] - arr[j])*Math.abs(arr[i]-arr[j])) + ans[j]); 
  				}else if(Math.abs(arr[i]-arr[j]) == 2*r){
  					ans[i] = Math.max(ans[i],ans[j]);
  				}
  			}
  		}
  		for(int i = 0;i < ans.length;i++){
  			System.out.printf("%.7f ",ans[i]);
  		}
  		w.close();
  	}
  
  }