Cod sursa(job #2850890)

Utilizator VertimaXxFlorea Vlad VertimaXx Data 17 februarie 2022 18:15:05
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.28 kb
#include <bits/stdc++.h>
using namespace std;
int n,i,t,x,st,dr,mij,v[100005],T;
int main(void){
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin >> n;
    for(i=1;i<=n;i++)
    {
        fin >> v[i];
    }
    fin >> T;
    for(i=1;i<=T;i++)
    {
        fin >> t >> x;
        st = 1;
        dr = n;
        if(t == 0)
        {
            while(st <= dr)
            {
                mij = (st+dr)/2;
                if(v[mij] == x)
                {
                    st = mij+1;
                } else if(v[mij] < x)
                {
                    st = mij+1;
                } else if(v[mij] > x)
                {
                    dr = mij-1;
                }
            }
            mij = (st+dr)/2;
            if(v[mij] > x)
            {
                mij--;
            }
            if(v[mij] == x)
            {
                fout << mij << "\n";
            }
        }
        if(t==1)
        {
            while(st <= dr)
            {
                mij = (st+dr)/2;
                if(v[mij] == x)
                {
                    st = mij+1;
                } else if(v[mij] < x)
                {
                    st = mij+1;
                } else if(v[mij] > x)
                {
                    dr = mij-1;
                }
            }
            mij = (st+dr)/2;
            if(v[mij] > x)
            {
                mij--;
            }
            if(v[mij] == x)
            {
                fout << mij << "\n";
            }
            if(v[mij] < x)
            {
                fout << mij << "\n";
            }
        }
        if(t==2)
        {
            while(st <= dr)
            {
                mij = (st+dr)/2;
                if(v[mij] == x)
                {
                    dr = mij-1;
                } else if(v[mij] < x)
                {
                    st = mij+1;
                } else if(v[mij] > x)
                {
                    dr = mij-1;
                }
            }
            mij = (st+dr)/2;
            if(v[mij] < x)
            {
                mij++;
            }
            if(v[mij] >= x)
            {
                fout << mij << "\n";
            }
        }
    }
}