Cod sursa(job #212620)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 5 octombrie 2008 22:29:48
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
 #include <fstream>

 using namespace std;
 int n,m,sir[100010];

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

 void r_0(int nr){
     int st=1,dr=n;
     while(dr-st>1)
     {
         int mij=(st+dr)>>1;
         if(sir[mij]<=nr)
             st=mij;
         else
             dr=mij;
     }

     if(sir[dr]==nr)
         fout<<dr;
     else
         if(sir[st]==nr)
             fout<<st;
         else
             fout<<"-1";
 }


 void r_1(int nr)
 {
     int st=1,dr=n;
     while(dr-st>1)
     {
         int mij=(st+dr)>>1;
         if(sir[mij]<=nr)
             st=mij;
         else
             dr=mij;
     }
    if(sir[dr] <= nr)
        fout<<dr;
    else
        fout<<st;
 }

 void r_2(int nr){

     int st=1,dr=n;
     while(dr-st>1)
     {
         int mij=(st+dr)>>1;
         if(sir[mij]<nr)
             st=mij;
         else
             dr=mij;
     }
    if(sir[st] >= nr)
        fout<<st;
    else
        fout<<dr;
 }

void afish()
{
    fin>>n;
     for(int i=1;i<=n;i++)
        fin>>sir[i];
    fin>>m;
     for(int i=1;i<=m;i++){
         int x,nr;
         fin>>x>>nr;
         if(x==0)
            r_0(nr);
         else
             if(x==1)
                r_1(nr);
             else
                 r_2(nr);
        fout<<"\n";
     }
}

 int main()
 {
     afish();
     return 0;
 }