Cod sursa(job #1786595)

Utilizator cazonirobertCazoni robert cazonirobert Data 23 octombrie 2016 12:59:02
Problema Cautare binara Scor 30
Compilator java Status done
Runda Arhiva educationala Marime 3.59 kb
//package main;

import java.io.*;

public class Main {

    public static int cautbin0(int[]nums,int x)
    {

        int lo=0;
        int hi=nums.length-1;
        int ok=0;
        int res=-1;
        while(lo<=hi)
        {
            int mid=(int)(lo+((double)hi-lo)/2);
            if(nums[mid]>x)
            {
                hi=mid-1;
            }
            else{
                if(nums[mid]==x) {
                    ok = 1;
                    res=mid;
                }
                lo=mid+1;
            }
        }
        if(ok==0)
            return -1;
        return res;
    }
    public static int cautbin1(int[]nums,int x)
    {

        int lo=0;
        int hi=nums.length-1;
        int res=-1;
        while(lo<=hi)
        {
            int mid=(int)(lo+((double)hi-lo)/2);
            if(nums[mid]>x)
            {
                hi=mid-1;
            }
            else{
                if(nums[mid]<=x) {
                    res=mid;
                }
                lo=mid+1;
            }
        }
        return res;
    }
    public static int cautbin2(int[]nums,int x)
    {

        int lo=0;
        int hi=nums.length-1;
        int res=-1;

        while(lo<=hi)
        {
            int mid=(int)(lo+((double)hi-lo)/2);
            if(nums[mid]<x)
                lo=mid+1;
            else {
                if(nums[mid]>=x)
                {
                    res=mid;
                }
                hi=hi-1;
            }
        }
        return res;
    }
    public static void main(String[] args) throws IOException {
        //int[]nums={1,3,3,3,5};
        int []nums;
        FileReader flIN = null;
        FileWriter flOUT = null;
        BufferedReader in;
        BufferedWriter  out;
        int n=0;
        try {
            flIN = new FileReader("cautbin.in");
            flOUT = new FileWriter("cautbin.out");
        }
        finally{
            in=new BufferedReader(flIN);
            out=new BufferedWriter(flOUT);
            String s=in.readLine();
            String []array=s.split(" ");
            n=Integer.parseInt(array[0]);

            nums=new int[n];
            s=in.readLine();
            array=s.split(" ");
            for(int i=0;i<n;i++)
            {
                nums[i]=Integer.parseInt(array[i]);
            }
            int querries=0;
            s=in.readLine();
            array=s.split(" ");
            querries=Integer.parseInt(array[0]);

            for(int i=0;i<querries;i++)
            {
                s=in.readLine();
                array=s.split(" ");
                int command=Integer.parseInt(array[0]);
                int x=Integer.parseInt(array[1]);
                switch(command){
                    case 0:
                        int res=cautbin0(nums,x);
                        if(res!=-1)
                            res++;
                        String inter=Integer.toString(res);
                        out.write(inter);
                        out.newLine();
                        break;
                    case 1:
                        out.write(Integer.toString(cautbin1(nums,x)+1));
                        out.newLine();
                        break;
                    case 2:
                        out.write(Integer.toString(cautbin2(nums,x)+1));
                        out.newLine();
                        break;
                }
            }
            out.close();
            in.close();
        }

            //System.out.println(cautbin2(nums, 3));

    }
}