Cod sursa(job #1417392)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 10 aprilie 2015 11:48:36
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

unsigned int a[100001];

int main()
{
    int n,m,i,j,nr,s,d,gasit,mij,tip,x;

   fin>>n;
   for(i=1; i<=n; i++) fin>>a[i];
   fin>>m;
   for(i=1; i<=m; i++)
     {
       fin>>tip>>x;
       if(tip==0)
        {
          s=1; d=n; gasit=0;
          while (gasit==0 && s<=d)
             {
                mij=(s+d)/2;
                if(a[mij]==x) gasit=1;
                else if(x>a[mij]) s=mij+1;
                     else d=mij-1;
             }
          if(gasit==1) {for(j=mij; j<=n; j++) if(a[j]>a[mij]) {fout<<j-1<<'\n'; break;}}
          else fout<<'-1'<<'\n';
        }
       if(tip==1)
        {
          s=1; d=n; gasit=0;
          while (gasit==0 && s<=d)
             {
                mij=(s+d)/2;
                if(a[mij]<=x) gasit=1;
                else d=mij-1;
             }
          {for(j=mij; j<=n; j++) if(a[j]>a[mij]) {fout<<j-1<<'\n'; break;}}
        }
       if(tip==2)
        {
          s=1; d=n; gasit=0;
          while (gasit==0 && s<=d)
             {
                mij=(s+d)/2;
                if(a[mij]>=x) gasit=1;
                else s=mij+1;
             }
          {for(j=mij; j>=1; j--) if(a[j]<a[mij]) {fout<<j+1<<'\n'; break;}}
        }
     }


    return 0;
}