Pagini recente » Cod sursa (job #1227267) | Cod sursa (job #2638304) | Cod sursa (job #565347) | Cod sursa (job #3276078) | Cod sursa (job #869363)
Cod sursa(job #869363)
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[100001],maxim;
void citire(){
f>>n;
for (int i=1;i<=n;i++)
f>>v[i];
}
void cautbin0(int x, int st,int dr)
{
int mid;
if (st<=dr&&st!=0)
{
mid=(st+dr)/2;
if (st==dr&&v[mid]==x&&maxim<mid)
maxim=mid;
if (st<dr){cautbin0(x,st,mid);
cautbin0(x,mid+1,dr);}
}
}
void cautbin1(int x, int st,int dr)
{
int mid;
if (st<=dr&&st!=0)
{
mid=(st+dr)/2;
if (st==dr&&v[mid]<=x&&maxim<mid)
maxim=mid;
if (st<dr){cautbin1(x,st,mid);
cautbin1(x,mid+1,dr);}
}
}
void cautbin2(int x, int st,int dr)
{
int mid;
if (st<=dr&&st!=0)
{ mid=(st+dr)/2;
if (st==dr&&v[mid]>=x&&maxim>mid)
maxim=mid;
if (st<dr){cautbin2(x,st,mid);
cautbin2(x,mid+1,dr);}
}
}
int main()
{
citire();
f>>m;
for (int i=1;i<=m;i++)
{
int q,x;
f>>q>>x;
if (q!=2) maxim=-1;
else maxim=100001;
if (q==0) cautbin0(x,1,n);
else if (q==1) cautbin1(x,1,n);
else cautbin2(x,1,n);
g<<maxim<<'\n';
}
return 0;
}