Cod sursa(job #701395)

Utilizator RoPaulPersa Paul RoPaul Data 1 martie 2012 15:37:13
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>
using namespace std;
int main()
{
	int n,m,ns[100001],ms,i,s,d,v,mij,j,mam,maM;
	ifstream f("cautbin.in");
	ofstream g("cautbin.out");
    f>>n;
	for(i=1;i<=n;i++)
		f>>ns[i];
	f>>m;
	for(j=1;j<=m;j++)
	{
		f>>ms>>v;
		s=1;
		d=n;
		if(ms==0)
		{
			while(s<=d)
			{
				mij=(d+s)/2;
				if(v>ns[mij])
					s=mij;
				if(v<ns[mij])
					d=mij;
				if(v==ns[mij])
					break;
			}	
			if(v==ns[mij])
			{
			    while(ns[mij]==v && mij<=n)
					mij++;
				g<<mij-1<<endl;
				
			}
			else
			    g<<-1<<endl;
		}
		if(ms==1)
		{
			while(s<=d)
			{
				mij=(d+s)/2;
				if(v>ns[mij])
				{
					mam=mij;
					s=mij;
				}
				if(v<ns[mij])
					d=mij;
				if(v==ns[mij])
					break;
			}
				if(v==ns[mij])
			{
			    while(ns[mij]==v && mij<=n)
					mij++;
				g<<mij-1<<endl;
			}
			else
			    g<<mam<<endl;
		}
		if(ms==2)
		{
				while(s<=d)
			{
				mij=(d+s)/2;
				if(v>ns[mij])
					s=mij;
				if(v<ns[mij])
				{
					d=mij;
					maM=mij;
				}
				if(v==ns[mij])
					break;
			}
				if(v==ns[mij])
				g<<mij-1<<endl;
			else
			    g<<maM<<endl;
		}
	}
g.close();
f.close();
return 0;
}