Pagini recente » Cod sursa (job #1889101) | Cod sursa (job #2022760) | Cod sursa (job #855357) | Cod sursa (job #855318) | Cod sursa (job #1728389)
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
int max_search(vector<int> v,int val){
if(v.empty() || val < v[0] || val > v[v.size()- 1])
return -1;
int step,i;
for(step=1;step<v.size();step<<=1);
for(i=0;step;step>>=1){
if(i + step < v.size() && v[i + step] <=val )
i+=step;
}
return i;
}
int op_1(vector<int> v,int val){
return max_search(v,val);
}
int op_2(vector<int> v,int val){
int poz = max_search(v,val);
if(poz < v.size()-2 && v[poz]!=val)
poz++;
else while(poz > 1 && v[poz-1] == v[poz]) poz--;
return poz;
}
int main()
{
vector<int> v;
int nr,op,opr;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> nr;
for(int i=0;i<nr;i++){
f >> op;
v.push_back(op);
}
f >> nr;
for(int i=0;i<nr;i++){
f >> opr;
f >> op;
if(opr == 0)
g << max_search(v,op) + 1 << "\n";
else if(opr == 1)
g << op_1(v,op) +1<< "\n";
else g << op_2(v,op) +1<< "\n";
}
return 0;
}