Cod sursa(job #1812323)
Utilizator | Data | 21 noiembrie 2016 23:05:51 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.05 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int i,j,n,m,k,v[100020],x,r;
void caut(int s,int d,int &p,int k,int x)
{
if(s<=d)
{
int m;
m=(s+d)/2;
if(k==0)
{
if(v[m]==x && m>p)
p=m;
caut(s,m-1,p,k,x);
caut(m+1,d,p,k,x);
}
else
if(k==1)
{
if(v[m]<=x && m>p)
p=m;
caut(s,m-1,p,k,x);
caut(m+1,d,p,k,x);
}
else
if(k==2)
{
if(v[m]>=x && p==-1)
p=m;
else
if(v[m]>=x && p>0 && m<p)
p=m;
caut(s,m-1,p,k,x);
caut(m+1,d,p,k,x);
}
}
}
int main()
{
int p=-1;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
f>>r;
while(r!=0)
{
p=-1;
f>>k>>x;
caut(1,n,p,k,x);
g<<p<<endl;
r--;
}
}