Pagini recente » Cod sursa (job #2637004) | Cod sursa (job #999959) | Cod sursa (job #961358) | Cod sursa (job #1099936) | Cod sursa (job #2281211)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
void case0(int v[100000], int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(gasit==0 && pozs<pozd){
if(v[med+1]!=x&&v[med]==x){
poz=med;
gasit=1;
}
else
if(x<v[med])
pozd=med;
else
pozs=med+1;
med=pozs+(pozd-pozs)/2;
}
fout<<poz<<endl;
return;
}
void case1(int v[100000], int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(gasit==0 && pozs<pozd){
if(v[med+1]>x&&v[med]<=x){
poz=med;
gasit=1;
}
else if(x<v[med])
pozd=med;
else
pozs=med+1;
med=pozs+(pozd-pozs)/2;
}
fout<<poz<<endl;
return;
}
void case2(int v[100000], int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(gasit==0 && pozs<pozd){
if(v[med-1]<x&&v[med]>=x){
poz=med;
gasit=1;
}
else if(x<v[med])
pozd=med;
else
pozs=med+1;
med=pozs+(pozd-pozs)/2;
}
fout<<poz<<endl;
return;
}
int main()
{
int N,M,v[100000],op,x;
fin>>N;
for(int i=1; i<=N; i++){
fin>>v[i];
}
fin>>M;
for(int i=1; i<=M; i++){
fin>>op>>x;
if(op==0)
case0(v,x,N);
else if(op==1)
case1(v,x,N);
else
case2(v,x,N);
}
return 0;
}