Pagini recente » Cod sursa (job #2072562) | Cod sursa (job #869828) | Cod sursa (job #2140465) | Cod sursa (job #1279513) | Cod sursa (job #1147849)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int m, type, value, n, v[100010], x;
void citeste() {
fin>>n;
for (int i = 1; i <= n; i++) {
fin>>v[i];
}
}
void afiseaza_valoare() {
fout<<x<<endl;
}
int max(int a, int b) {
if (a==-1) {
return b;
} else if (b==-1) {
return a;
}
return (a>b ? a:b);
}
int min(int a, int b) {
if (a == -1) {
return b;
} else if (b == -1) {
return a;
}
return (a < b ? a : b);
}
int CautareMult(int st, int dr) {
if (st > dr) {
return -1;
}
int mij = (st + dr) / 2;
if (v[mij] > value) {
return CautareMult(st, mij - 1);
} else {
return max(mij, CautareMult(mij + 1, dr));
}
}
int CautarePutin(int st, int dr) {
if (st > dr) {
return -1;
}
int mij = (st + dr) / 2;
if (v[mij] < value) {
return CautarePutin(mij + 1, dr);
} else {
return min(mij, CautarePutin(st ,mij-1));
}
}
int CautareEgal(int st, int dr) {
if (st>dr){
return -1;
}
int mij = (st + dr)/2;
if (v[mij] < value) {
return CautareEgal(mij+1,dr);
} else if(v[mij]>value) {
return CautareEgal(st, mij-1);
} else{
return max(mij, CautareEgal(mij+1, dr));
}
}
void rezolva() {
fin>>m;
for (int i = 0; i < m; i++) {
fin>>type>>value;
switch (type) {
case 0:
x = CautareEgal(1, n);
break;
case 1:
x = CautareMult(1, n);
break;
case 2:
x = CautarePutin(1, n);
break;
default:
break;
}
afiseaza_valoare();
}
}
int main(){
citeste();
rezolva();
return 0;
}