Pagini recente » Cod sursa (job #2721376) | Cod sursa (job #677913) | Cod sursa (job #14324) | Cod sursa (job #3210019) | Cod sursa (job #932276)
Cod sursa(job #932276)
#include <iostream>
#include <fstream>
using namespace std;
int a[100001],n,x,y,i,k,ok,j,m,p;
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin>>n;
for(i=1;i<=n;i++)fin>>a[i];
fin>>m;
for(k=1;k<=m;k++)
{
fin>>p>>x;
i=1;j=n;ok=1;
if(p==0)
{
do{
y=(i+j)/2;
if(a[y]==x)
{
while(a[y+1]==x){y++;}
ok=0;
}
else if(a[y]>x)j=y-1;
else i=y+1;
}while((ok==1)&&(i<=j));
if(ok==0)fout<<y<<"\n";
else fout<<-1<<"\n";
}
if(p==1)
{
do{
y=(i+j)/2;
if(a[y]==x)
{
while((a[y+1]<=x)&&(y<n)){y++;}
ok=0;
}
else if(a[y]>x)j=y-1;
else i=y+1;
}while((ok==1)&&(i<=j));
if(ok==0)fout<<y<<"\n";
else fout<<j<<"\n";
}
if(p==2)
{
do{
y=(i+j)/2;
if(a[y]==x)
{
while(a[y-1]>=x){y--;}
ok=0;
}
else if(a[y]>x)j=y-1;
else i=y+1;
}while((ok==1)&&(i<=j));
if(ok==0)fout<<y<<"\n";
else fout<<i<<"\n";
}
}
fin.close();
fout.close();
return 0;
}