Cod sursa(job #1728389)

Utilizator xSliveSergiu xSlive Data 12 iulie 2016 20:18:25
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#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;
}