Cod sursa(job #701376)

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