Pagini recente » Cod sursa (job #2596709) | Cod sursa (job #1504542) | Cod sursa (job #1093454) | Cod sursa (job #1932494) | Cod sursa (job #1946595)
#include <iostream>
#include <fstream>
using namespace std;
int sir [100000];
int main()
{
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int n;
in>>n;
for(int i=0;i<n;i++)
in>>sir[i];
int m;
in>>m;
for(int op=1;op<=m;op++){
int intrebare,numar,raspuns;
in>>intrebare>>numar;
int stanga=0,dreapta=n-1;
int gasit=0;
if(intrebare==0)
{
while(!gasit)
{//cout<<stanga<<endl;
if(sir[stanga] == numar && sir[stanga+1] != numar){
raspuns=stanga;
gasit=1;
break;
}
if(sir[(stanga+dreapta)/2]<=numar)
{
stanga=(stanga+dreapta)/2 + 1;
}else if(sir[(stanga+dreapta)/2]>numar){
dreapta=(stanga+dreapta)/2 - 1;
}
if(dreapta<stanga)
{
raspuns=-2;
break;
}
}
}
//gasit=0;
if(intrebare == 1){
while(!gasit)
{//cout<<stanga<<endl;
if(sir[stanga] <= numar && sir[stanga+1] > numar){
raspuns=stanga;
gasit=1;
break;
}
if(sir[(stanga+dreapta)/2]<=numar)
{
stanga=(stanga+dreapta)/2 + 1;
}else if(sir[(stanga+dreapta)/2]>numar){
dreapta=(stanga+dreapta)/2 - 1;
}
if(dreapta<stanga)
{
raspuns=-2;
break;
}
}
}
if(intrebare == 2){
while(!gasit)
{//cout<<stanga<<endl;
if(sir[stanga] == numar && sir[stanga-1] != numar){
raspuns=stanga;
gasit=1;
break;
}
if(sir[(stanga+dreapta)/2]<numar)
{
stanga=(stanga+dreapta)/2 + 1;
}else if(sir[(stanga+dreapta)/2]>=numar){
dreapta=(stanga+dreapta)/2 - 1;
}
if(dreapta<stanga)
{
raspuns=-2;
break;
}
}
}
out<<raspuns+1<<'\n';
}
in.close();
out.close();
return 0;
}