Cod sursa(job #813341)

Utilizator SCBbestofSocaciu-Cumpanasu Bogdan SCBbestof Data 15 noiembrie 2012 11:25:50
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include<cassert>
#include<vector>
#include<algorithm>
#include<math.h>
#include<cstdio>
#include<fstream>

int N,ex,v[100000];

using namespace std;
void read()
{
	assert(freopen("cautbin.in","r",stdin));
	cin>>N;
	for(int i=1;i<=N;++i)
		cin>>v[i];
	cin>>ex;
}
void solve()
{
	int x,y;
    FILE *g = fopen("cautbin.out","w");
	vector<int> A(v+1,v+N+1);
	vector<int>::iterator low,up;
	for(int i = 1 ; i <= ex ; ++i)
	{
		cin>>x>>y;
		if(x==0)
		{
			if( upper_bound(A.begin(),A.end(),y) != lower_bound(A.begin(),A.end(),y) )
				fprintf(g,"%d\n",int(upper_bound(A.begin(),A.end(),y)-A.begin()));
			else
				fprintf(g,"-1\n");
		}
		if(x==1)
		{
			if(upper_bound(A.begin(),A.end(),y)!=lower_bound(A.begin(),A.end(),y))
				fprintf(g,"%d\n",int(upper_bound(A.begin(),A.end(),y)-A.begin()));
			else
				fprintf(g,"-1\n");
		}
		if(x==2)
		{
			if(upper_bound(A.begin(),A.end(),y)!=lower_bound(A.begin(),A.end(),y))
				fprintf(g,"%d\n",int(lower_bound(A.begin(),A.end(),y)-A.begin())+1);
			else
				fprintf(g,"-1\n");
		}
	}
	fclose(g);
}
int main()
{
	read();
	solve();
	return 0;
}