Pagini recente » Cod sursa (job #690512) | Cod sursa (job #996521) | Cod sursa (job #1053613) | Cod sursa (job #2447997) | Cod sursa (job #2863425)
#include <fstream>
#include <vector>
using namespace std;
#define ll long long
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
ll n, m;
vector <ll> x;
ll binary_search_max_index_of_num(ll start, ll end, ll k){
if(x[end] == k)
return end;
if(start >= end)
return -1;
ll mid = (start + end) / 2;
if(x[mid] == k) {
if(x[mid + 1] != k)
return mid;
else
return binary_search_max_index_of_num(mid, end, k);
}
else if(x[mid] < k)
return binary_search_max_index_of_num(mid + 1, end, k);
else
return binary_search_max_index_of_num(start, mid - 1, k);
}
ll binary_search_index_of_num_or_less_than_num(ll start, ll end, ll k){
if(start >= end)
return start;
ll mid = (start + end) / 2;
if(x[mid] == k){
if(x[mid + 1] != k)
return mid;
else
return binary_search_max_index_of_num(mid, end, k);
}
else if(x[mid] > k)
return binary_search_index_of_num_or_less_than_num(start, mid - 1, k);
else
return binary_search_index_of_num_or_less_than_num(mid + 1, end, k);
}
int main(){
fin >> n;
x.resize(n + 1);
for(ll i = 1; i <= n; ++i)
fin >> x[i];
fin >> m;
for(ll i = 1, query, num, k; i <= m; ++i){
fin >> query >> num;
if(query == 0)
fout << binary_search_max_index_of_num(1, n, num) << "\n";
else if(query == 1)
fout << "";
else if(query == 2)
fout << "";
}
return 0;
}