Cod sursa(job #625043)

Utilizator danutbodbodnariuc danut danutbod Data 23 octombrie 2011 17:23:24
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int op,p,ps,pd,a[100001],i,n,y,x,m;
int cautare_bin1(int x){//returneaza poz elementului x daca exista in sir
  int st,dr,k,mid;         //sau poz elementului mai mare ca x daca x nu exista in sir
   st=1; dr=n; k=0;
   while(st<=dr){
       mid=(st+dr)/2;
       if(a[mid]==x)return mid;
       if (a[mid]>x) dr=mid-1;
       else st=mid+1;
        }
   return dr;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)f>>a[i];
    f>>m;
    for(i=1;i<=m;i++){
      f>>op>>y;
      p=cautare_bin1(y);
      pd=p;ps=p;
      while(a[pd]==y)pd++;
      while(a[ps]==y)ps--;
      if(a[p]==y){
         if(op==0)  g<<--pd<<'\n';
         if(op==1)  g<<--pd<<'\n';
         if(op==2)  g<<++ps<<'\n';
      }
      if(a[p]!=y){
         if(op==0)  g<<-1<<'\n';
         if(op==1)  g<<ps<<'\n';
         if(op==2)  g<<pd<<'\n';
      }
    }
    f.close();g.close();
    return 0;
}