Cod sursa(job #1760712)

Utilizator vlad2004SuntUnNanoTub vlad2004 Data 21 septembrie 2016 09:41:14
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include <fstream>

using namespace std;
ifstream  in("cautbin.in");
ofstream out ("cautbin.out");
int v[10000000];
int main()
{
    int i,c,n,sol,m,x;
    in>>n;
    for(i=1; i<=n; i++)
    {
        in>>v[i];
    }
    in>>m;
    for(i=1; i<=m; i++)
    {
        in>>c>>x;
        if(c==0)
         {int n2 = 1;
                while ( n2*2 <= n ) {
                    n2 *= 2;
                }

                int sol = 0;
                    for ( int i = n2; i != 0; i /= 2 ) {
                        if ( sol+i <= n && v[sol+i] <= x ) {
                            sol += i;
                    }
                    }

                if(v[sol]==x)
                {
                    out<<sol<<'\n';
                }
                else
                out<<"-1"<<'\n';
          }
          if(c==1)
          {
                int n2 = 1;
                    while ( n2*2 <= n ) {
                        n2 *= 2;
                    }

                int sol = 0;
                    for ( int i = n2; i != 0; i /= 2 ) {
                        if ( sol+i <= n && v[sol+i] <= x ) {
                            sol += i;
                        }
                    }

                out<<sol<<'\n';
          }
          if(c==2)
          {
                        int n2 = 1;
                                while ( n2*2 <= n ) {
                                    n2 *= 2;
                                }

                        int sol = n+1;
                                for ( int i = n2; i != 0; i /= 2 ) {
                                    if ( sol-i>=1 && v[sol-i]>=x ) {
                                        sol -= i;
                                    }
                                }
                out<<sol<<'\n';


          }
    }
    return 0;
}