Cod sursa(job #1601227)

Utilizator gabime11Gabriel gabime11 Data 15 februarie 2016 20:22:54
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.79 kb
/*Se da un sir de numere ordonat crescator cu N elemente,
si se cere sa se raspunda la M intrebari de tipul:
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x
sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica
sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare
sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x

cautbin.in	    cautbin.out
5                  4
1 3 3 3 5          4
3                  2
0 3
1 3
2 3*/
#include<iostream>
#include<fstream>
using namespace std;
int zero(int v[100002], int n, int k)
{
    int i;
    for(i=n;i>=1;i--)
    {
        if(v[i]==k)
        {
            return i;
        }
    }
    return -1;
}
int unu(int v[100002], int n, int k)
{
    int i;
    for(i=n;i>=1;i--)
    {
        if(v[i]<=k)
        {
            return i;
        }
    }
    return 0;
}
int doi(int v[100002], int n, int k)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(v[i]>=k)
        {
            return i;
        }
    }
    return 0;
}
int main()
{
    int v[100002],i,j,N,M,x,t;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin>>N;
    for(i=1;i<=N;i++)
    {
        fin>>j;
        v[i]=j;
    }
    fin>>M;
    for(i=1;i<=M;i++)
    {
        fin>>t>>x;
        if(t==0)
        {
            fout<<zero(v,N,x)<<'\n';
        }
        if(t==1)
        {
            fout<<unu(v,N,x)<<'\n';
        }
        if(t==2)
        {
            fout<<doi(v,N,x)<<'\n';
        }
    }
    fin.close();
    fout.close();
    return 0;
}