Pagini recente » Cod sursa (job #2585028) | Cod sursa (job #903288) | Cod sursa (job #1589910) | Cod sursa (job #985291) | Cod sursa (job #2281338)
#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(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 v[100000], 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 v[100000], 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,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;
}