Cod sursa(job #2990849)

Utilizator andreea678Rusu Andreea-Cristina andreea678 Data 8 martie 2023 17:29:51
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.2 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
void cerinta1(int v[],int n, int x) {
        int maxim;
        int poz;
        int r=n;
        int l=1;
        while (l<=r) {
            int m=(l+r)/2;
            if (x==v[m]) {
                poz=m;
                if(maxim<poz) {
                    maxim=poz;
                }
                l=m+1;
            }
            if (v[m]>x) {
                r=m-1;
            }
            if (v[m]<x) {
                l=m+1;
            }
        }
        if (maxim!=0) {
            fout << maxim << '\n';
        }
        else
            fout << -1 << '\n';
}
void cerinta2(int v[],int n, int x) {
        int maxim;
        int ct=0;
        int poz;
        int r=n;
        int l=1;
        while (l<=r) {
            int m=(l+r)/2;
            if (x==v[m]) {
                poz=m;
                if(maxim<poz) {
                    maxim=poz;
                }
                l=m+1;
            }
            if (v[m]>x) {
                r=m-1;
            }
            if (v[m]<x) {
                l=m+1;
            }
        }
        fout << r << '\n';

}
void cerinta3(int v[],int n, int x) {
        int maxim;
        int ct=0;
        int poz;
        int r=n;
        int l=1;
        while (l<=r) {
            int m=(l+r)/2;
            if (x==v[m]) {
                poz=m;
                if(maxim<poz) {
                    maxim=poz;
                }
                r=m-1;
            }
            if (v[m]>x) {
                r=m-1;
            }
            if (v[m]<x) {
                l=m+1;
            }
        }
        fout << l << '\n';

}
int main()
{
    int n, nr, c, v[100001], poz=-1, x,maxim=0, m, M;
    fin >> n;
    for (int i=1; i<=n; ++i) {
        fin >> nr;
        v[i]=nr;
    }
    fin >> M;
    for (int i=1; i<=M; ++i) {
        fin >> c >> x;

        if (c==0) {
            cerinta1(v, n, x);
        }
        if (c==1) {
            cerinta2(v, n, x);
        }
        if (c==2) {
            cerinta3(v, n, x);
        }
    }
    return 0;
}