Cod sursa(job #1836750)
Utilizator | Data | 28 decembrie 2016 17:12:54 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.72 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int i,j,n,poz=-1,k;
void bin1(int s,int d,int* x,int &poz,int val)
{
if(s<=d)
{
if(s==d)
{
if(x[s]==val)
if(s>poz)
poz=s;
}
else
{
bin1(s,(s+d)/2,x,poz,val);
bin1((s+d)/2+1,d,x,poz,val);
}
}
}
void bin2(int s,int d,int* x,int &poz,int val)
{
if(s<=d)
{
if(s==d)
{
if(x[s]<=val)
{
if(s>poz)
poz=s;
}
}
else
{
bin2(s,(s+d)/2,x,poz,val);
bin2((s+d)/2+1,d,x,poz,val);
}
}
}
void bin3(int s,int d,int* x,int &poz,int val)
{
if(s<=d)
{
if(s==d)
{
if(x[s]>=val)
{
if(poz>s)
poz=s;
}
}
else
{
bin3(s,(s+d)/2,x,poz,val);
bin3((s+d)/2+1,d,x,poz,val);
}
}
}
int main()
{
int tip1,val1;
f>>n;
int* v=new int[n+5];
for(i=1;i<=n;i++)
f>>v[i];
f>>k;
for(i=1;i<=k;i++)
{
f>>tip1>>val1;
if(tip1==0)
{
poz=-1;
bin1(1,n,v,poz,val1);
}
else
if(tip1==1)
{
poz=-1;
bin2(1,n,v,poz,val1);
}
else
if(tip1==2)
{
poz=n;
bin3(1,n,v,poz,val1);
}
g<<poz<<"\n";
}
}