Cod sursa(job #1404148)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 27 martie 2015 20:26:05
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.29 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int main()
{int n,st,dr,a[100001],i,m,q,x,k,poz1,poz;
 fin>>n;
 for(i=1;i<=n;i++)
    fin>>a[i];
 fin>>m;
 for(i=1;i<=m;i++)
    {fin>>q>>x;
     if(q==0){k=0;
              st=1;
              dr=n;
              poz=(st+dr)/2;
              poz1=poz;
              while(k==0)
                   {if((a[poz]==x)&&(a[poz+1]>x)){fout<<poz<<"\n";break;}
                      else if(a[poz]>x){dr=poz;poz=(st+dr)/2;if(poz1==poz) poz--;}
                         else if(a[poz]<=x){st=poz;poz=(st+dr)/2;if(poz1==poz) poz++;}
                    if((poz==1)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==1) {fout<<"1\n";break;}
                    if((poz==n)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==n) {fout<<n<<"\n";break;}
                    if((a[poz]>x)&&(a[poz+1]<x)){fout<<"-1\n";}
                   }
             }
     if(q==1){k=0;
              st=1;
              dr=n;
              poz=(st+dr)/2;
              poz1=poz;
              while(k==0)
                   {if((a[poz]<=x)&&(a[poz+1]>x)){fout<<poz<<"\n";break;}
                      else if(a[poz]>x){dr=poz;poz=(st+dr)/2;if(poz1==poz) poz--;}
                         else if(a[poz]<=x){st=poz;poz=(st+dr)/2;if(poz1==poz) poz++;}
                    if((poz==1)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==1) {fout<<"1\n";break;}
                    if((poz==n)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==n) {fout<<n<<"\n";break;}
                   }
             }
     if(q==2){k=0;
              st=1;
              dr=n;
              poz=(st+dr)/2;
              poz1=poz;
              while(k==0)
                   {if((a[poz]>=x)&&(a[poz-1]<x)){fout<<poz<<"\n";break;}
                      else if(a[poz]>=x){dr=poz;poz=(st+dr)/2;if(poz1==poz) poz--;}
                         else if(a[poz]<x){st=poz;poz=(st+dr)/2;if(poz1==poz) poz++;}
                    if((poz==1)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==1) {fout<<"1\n";break;}
                    if((poz==n)&&(a[poz]!=x)){fout<<"-1\n";break;}
                    if(poz==n) {fout<<n<<"\n";break;}
                   }
             }
    }
}