Pagini recente » Cod sursa (job #2487905) | Cod sursa (job #2587506) | Cod sursa (job #2450926) | Cod sursa (job #1973707) | Cod sursa (job #2092967)
#include <iostream>
#include <fstream>
#define nmax 100001
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,v[nmax];
int cautarebin(int st,int dr,int x)
{
if (st>dr)
{
return -1;
}
else if (st==dr)
{
if (v[st]==x)
{
return st;
}
else return -1;
}
else
{
int m=(st+dr)/2;
if (v[m]==x)
{
return max(m,cautarebin(m+1,dr,x));
}
else if (v[m]>x)
{
//cout<<st<<" "<<dr<<"\n";
return cautarebin(st,m,x);
}
else if (v[m]<x)
{
return cautarebin(m+1,dr,x);
}
}
}
void reza()
{
int val;
f>>val;
g<<cautarebin(1,n,val)<<"\n";
}
int cautarebin2(int st,int dr,int x)
{
//cout<<st<<" "<<dr<<"\n";
if (st==dr)
{
if (v[st]<=x)
{
return st;
}
else return -1;
}
else
{
int m=(st+dr)/2;
if (v[m]==x && v[m+1]!=x)
{
return m;
}
else
{
if (x>v[m])
{
return max(cautarebin2(m+1,dr,x),m);
}
else
{
cautarebin2(st,m,x);
}
}
}
}
void rezb()
{
int val;
f>>val;
g<<cautarebin2(1,n,val)<<"\n";
}
int cautarebin3(int st,int dr,int x)
{
if (st==dr)
{
return st;
}
else
{
int m=(st+dr)/2;
if (v[m]==x && v[m-1]!=x)
{
return m;
}
else
{
if (v[m]>=x)
{
cautarebin3(st,m,x);
}
else
{
return cautarebin3(m+1,dr,x);
}
}
}
}
void rezc()
{
int val;
f>>val;
g<<cautarebin3(1,n,val)<<"\n";
}
void citire()
{
f>>n;
for (int i=1;i<=n;i++)
{
f>>v[i];
}
int q,x;
f>>q;
for (int i=1;i<=q;i++)
{
f>>x;
if (x==0)
{
reza();
}
else if (x==1)
{
rezb();
}
else rezc();
}
}
int main()
{
citire();
return 0;
}