Cod sursa(job #1448639)

Utilizator nixman97Pogacean VIctor Paul nixman97 Data 7 iunie 2015 18:25:42
Problema Cautare binara Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
using namespace std;
long long v[100002],N;
long long checkup(long long x)
{
	long long s;
	s=x;
	while(v[s]==v[x])
	{
		s++;
	}
	return s-1;
}
long long checkdown(long long x)
{
	long long s;
	s=x;
	while(v[s]==v[x])
	{
		s--;
	}
	return s+1;
}
long long t1(long long x)
{
    long long i,mij,li=1, ls=N,found=0;
    while ((!found)&&(li<=ls))
    {
        mij=li + (ls-li)/2;
        if (v[mij]==x)
        {
            found=1;
            i=mij;
            while(v[mij]==v[i])
            {
                i++;
            }
            return i-1;
        }
        if (v[mij]>x) ls=mij-1;
        if (v[mij]<x) li=mij+1;
    }
    return -(ls);

}
int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    in>>N;
    long long i,t,x,d,M,u;
    for(i=1; i<=N; i++)
    {
        in>>v[i];
    }
    in>>M;
    for(i=1; i<=M; i++)
    {
        in>>t>>x;
        u=t1(x);
        if (t==0)
        {
            if (u<0) out<<"-1";
            else out<<u;

        }
        if (t==1)
        {
            if (u<0) out<<checkup(-u);
            else out<<u;
        }
        if (t==2)
        {
            if (u<0) out<<checkdown(-u+1);
            else
            {
                d=u;
                while(v[d]==v[u])
                {
                    d--;
                }
                out<<d+1;
            }

        }
        out<<'\n';
    }
    return 0;
}