Cod sursa(job #1321078)

Utilizator felipeGFilipGherman felipeG Data 18 ianuarie 2015 19:19:46
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100500],m,n,s,i,q,x,j;
void zero(int aux)
{
   for(s=1;s<=n;s<<=1);
    for(j=1;s;s>>=1)
        if(j+s<=n && v[j+s]<=x)
                j+=s;
        if(j==0||v[j]!=x)
            g<<"-1\n";
        else
            g<<j<<'\n';
}
void unu(int aux)
{
     for(s=1;s<=n;s<<=1);
      for(j=0;s;s>>=1)
      {
        if(j+s<=n&&v[j+s]<x+1)
            j+=s;
      }
      g<<j<<'\n';
}
void doi(int aux)
{
   for(s=1;s<=n;s<<=1);
    for(j=0;s;s>>=1)
        if(j+s<=n && v[j+s]<=x-1)
            j+=s;
    g<<j+1<<'\n';
}
int main()
{
    f>>n;
    for(i=0;i<n;++i)
       f>>v[i];
    f>>m;
    for(i=0;i<m;++i)
    {
        f>>q>>x;
        if(q==0)zero(x);
        if(q==1)unu(x);
        if(q==2)doi(x);
    }
    return 0;
}