Pagini recente » Cod sursa (job #131522) | Cod sursa (job #506094) | Cod sursa (job #1920250) | Cod sursa (job #802592) | Cod sursa (job #1746559)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
int n, m, vector[NMAX];
int mode, value;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int cautbin01(int leftt, int rightt, int position){
int middle = leftt + (rightt - leftt) / 2;
if(leftt == rightt){
if(vector[middle] == value)
position = middle;
return position;
}
if(vector[middle] == value){
position = middle;
return cautbin01(middle + 1, rightt, position);
}
else{
if(vector[middle] < value){
if(mode == 1)
position = middle;
return cautbin01(middle + 1, rightt, position);
}
else{
return cautbin01(leftt, middle - 1, position);
}
}
}
int cautbin2(int leftt, int rightt, int position){
int middle = leftt + (rightt - leftt) / 2;
if(leftt == rightt){
if(vector[middle] >= value)
position = middle;
return position;
}
if(vector[middle] >= value){
position = middle;
return cautbin2(leftt, middle - 1, position);
}
else{
return cautbin2(middle + 1, rightt, position);
}
}
void solve(){
f >> m;
for(int i = 0; i < m; i++){
f >> mode >> value;
if(mode == 0 || mode == 1){
g << cautbin01(0, n - 1, -1) + 1 << "\n";
}
if(mode == 2){
g << cautbin2(0, n - 1, value) + 1 << "\n";
}
}
}
int main(){
f >> n;
for(int i = 0; i < n; i++)
f >> vector[i];
solve();
f.close();
g.close();
return 0;
}