The [challenge](http://www.codechef.com/APRIL14/problems/ADIGIT) is to reconstruct an _n_-digit number using the following information:

> On each step, you choose an index _x_ from 1 to _n_.  For all indices _y_ (_y_
> < _x_), you calculate the difference _b_<sub>_y_</sub> = _a_<sub>_x_</sub> - _a_<sub>_y_</sub>.
> 
> You then calculate _B_<sub>1</sub> — sum of all by which are greater
> than 0 and _B_<sub>2</sub> — sum of all by which are less than 0.
> 
> The answer for this step is _B_<sub>1</sub> - _B_<sub>2</sub>.
> 
> **Input**
> 
> The first line contains two integers *n* and *m*, denoting the number
> of digits and number of steps. The second line contains *n* digits
> (without spaces) _a_<sub>1</sub>, _a_<sub>2</sub>, ..., _a_<sub>_n_</sub>.
> Each of the next *m* lines contains a single integer *x* denoting the index for
> the current step.
>
> **Output**
> 
> For each of _m_ steps print single number in a line - answer of the
> step.

Can someone please help me optimize this code or provide a better, less time-consuming solution?


    import java.io.*;
    import java.util.*;
    public class Chefs
    {
        //BufferedReader in;
        DataInputStream in;
        PrintWriter out;
        HashMap<Integer,Integer> mymap=new HashMap<Integer,Integer>();
        int a[],n,m,b1,b2;
        public Chefs()
        {
            //in=new BufferedReader(new InputStreamReader(System.in));
            in=new DataInputStream(System.in);
            out=new PrintWriter(System.out,true);
            readInput();
            calchef();
        }
        void readInput()
        {
            try
            {
                String digit=in.readLine();
                String split[]=digit.split("\\s+");
                n=Integer.parseInt(split[0]);
                m=Integer.parseInt(split[1]);
                a=new int[n];
                   
                digit=in.readLine();
			
                for(int i=0;i<digit.length();i++)
                    a[i]=digit.charAt(i);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        void calchef()
        {
            for(int i=0;i<m;i++)
            {  
                try
                {
                    b1=0;
                    b2=0;
                    int index=Integer.parseInt(in.readLine());
                    if(mymap.containsKey(index))
                    {
                        int ans=mymap.get(index);
                        out.println(ans);
                    }
                    else
                    {
                        for(int j=0;j<index-1;j++)
                        {
                            if(a[index-1]-a[j]>0)
                            {
                                b1+=(a[index-1]-a[j]);
                            }
                            else
                            {
                                b2+=(a[index-1]-a[j]);
                            }
                        }
                        int ans=b1-b2;
                        out.println(ans);
                        mymap.put(index,ans);
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
        public static void main(String[] args)
        {
            //long startTime = System.currentTimeMillis();
            Chefs c=new Chefs();
            //long endTime   = System.currentTimeMillis();
            //long totalTime = endTime - startTime;
            //System.out.println(totalTime);
        }
    }