Pagini recente » Cod sursa (job #3278880) | Cod sursa (job #806367) | Cod sursa (job #1117892) | Cod sursa (job #2636288) | Cod sursa (job #1404148)
#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;}
}
}
}
}