Cod sursa(job #1137374)

Utilizator alexstanseseStanese Alex alexstansese Data 9 martie 2014 12:46:54
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <stdio.h>

using namespace std;

int n,i,m,j, st, dr, mij;
unsigned int v[200010];
int opt, val;
FILE *fin;
FILE *fout;

void opt0(int val)
{
    st = 0;
    dr = n-1;
    while (st<=dr)
    {
        mij = st + (dr-st)/2;
        if (v[mij] <= val)
            st = mij+1;
        else
            dr =  mij-1;
    }
    mij = st + (dr-st)/2;
    if (v[mij] > val)
    	mij--;
    if (v[mij] == val)
    	fprintf(fout, "%d\n", mij+1);
    else
    	fprintf(fout, "%d\n", -1);
}

void opt1(int val)
{
	st = 0;
	dr = n-1;
	while (st<=dr)
    {
		mij = st + (dr-st)/2;
	    if (v[mij] <= val)
	        st = mij+1;
	    else
	        dr =  mij-1;
	}
	mij = st + (dr-st)/2;
	if (v[mij] > val)
		mij--;
	fprintf(fout, "%d\n", mij+1);
}

void opt2(int val)
{
	st = 0;
	dr = n-1;
	while (st<=dr)
	{
	    mij = st + (dr-st)/2;
	    if (v[mij] < val)
	        st = mij+1;
	    else
	        dr =  mij-1;
	}
	mij = st + (dr-st)/2;
	if (v[mij] < val)
	 	mij++;
	fprintf(fout, "%d\n", mij+1);
}

int main()
{
    fin = fopen("cautbin.in","r");
    fout = fopen("cautbin.out", "w");

    fscanf(fin, "%d", &n);
    for (i=0;i<n;i++)
        fscanf(fin,"%u ", &v[i]);

    fscanf(fin, "%d", &m);

    for (j=0;j<m;j++)
    {
        fscanf(fin, "%d %d", &opt, &val);
        switch(opt)
        {
            case 0: opt0(val); break;
            case 1: opt1(val); break;
            case 2: opt2(val); break;
            default : break;
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}