Pagini recente » Cod sursa (job #1680145) | Cod sursa (job #1215448) | Cod sursa (job #358624) | Cod sursa (job #1336897) | Cod sursa (job #2002946)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, m;
int v[100001];
void citire(){
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
}
int poz;
int cautareBinara(int st, int dr, int caut){
if(st > dr){
poz = st;
return -1;
}
else{
int mij = st + (dr -st) / 2;
if(v[mij] > caut)
cautareBinara(st, mij - 1, caut);
else if(v[mij] == caut)
return mij;
else
cautareBinara(mij + 1, dr, caut);
}
}
void rezolvare(){
in >> m;
for(int i = 1; i <= m; i++){
int a, b;
poz = 0;
in >> a >> b;
if(a == 0){
int temp = cautareBinara(1,n, b);
if(temp == -1)
out << temp << '\n';
else{
while(v[temp] == b)temp++;
out << temp - 1 << '\n';
}
}
else if(a == 2){
int temp = cautareBinara(1, n, b);
if(temp == -1)
out << poz - 1;
else{
while(v[temp] == b)temp--;
out << temp + 1 << '\n';
}
}
else{
int temp = cautareBinara(1, n, b);
if(temp == -1)
out << poz;
else{
while(v[temp] == b)temp++;
out << temp - 1 << '\n';
}
}
}
}
int main(){
citire();
rezolvare();
return 0;
}