Cod sursa(job #3174770)

Utilizator luke_a_shadowLuca Vlad Andrei luke_a_shadow Data 25 noiembrie 2023 09:56:21
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

int main()
{
    int n, m, v[100001], p, x, ans;
    
    fin>>n;
    for (int i=1; i<=n; i++){
        fin>>v[i];
    }
    fin>>m;
    
    for (int j=1; j<=m; j++){
        fin>>p>>x;
        int left=1, right=n;
        i=(left+right)/2;
        if (p==0){
            ans=-1;
            while (v[i]!=x || v[i+1]==x){
                if (v[i]==x){
                    i++;
                }
                else if(v[i]<x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            if (v[i]==x){
                fout<<i;
            }
            else{
                cout<<ans;
            }
        }
        if (p==1){
            ans=-1;
            while (v[i]<=x && v[i+1]<=x){
                if (v[i]==x){
                    i++;
                }
                else if(v[i]<x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            fout<<i;
        }
        if (p==2){
            ans=-1;
            while (v[i]>=x && v[i-1]>=x){
                if (v[i]==x){
                    i--;
                }
                else if(v[i]<x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            fout<<i;
        }
        fout<<endl;
    }

    return 0;
}