Pagini recente » Cod sursa (job #646610) | Cod sursa (job #2708426) | Cod sursa (job #3272101) | Cod sursa (job #2371988) | Cod sursa (job #2281604)
#include <fstream>
using namespace std;
int v[100010];
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
void case0( int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(pozs<pozd){
if(v[med]<=x){
pozs=med+1;
}
else
pozd=med-1;
med=pozs+(pozd-pozs)/2;
}
if(v[med]>x)
med--;
if(v[med]==x){
fout<<med<<endl;
return;
}
fout<<"-1"<<endl;
return;
}
void case1( int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(pozs<pozd){
if(v[med]<=x){
pozs=med+1;
}
else
pozd=med;
med=pozs+(pozd-pozs)/2;
}
if(v[med]>x)
med--;
fout<<med<<endl;
return;
}
void case2( int x, int pozd){
int poz=-1, pozs=1, med=pozd/2, gasit=0;
while(pozs<pozd){
if(v[med]<x){
pozs=med+1;
}
else
pozd=med;
med=pozs+(pozd-pozs)/2;
}
if(v[med]<x)
med++;
fout<<med<<endl;
return;
}
int main()
{
int n,M,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(x,n);
else if(op==1)
case1(x,n);
else
case2(x,n);
}
return 0;
}