Pagini recente » Cod sursa (job #2989385) | Cod sursa (job #1613835) | Cod sursa (job #1163053) | Cod sursa (job #227997) | Cod sursa (job #2265562)
#include <fstream>
using namespace std;
ifstream fi("cautbin.in");
ofstream fo("cautbin.out");
int N,A[100001];
int M;
int bs1(int st,int dr, int x)
{
if (st==dr)
if (A[st]==x)
return st;
else
return -1;
int m;
m=(st+dr+1)/2;
if (A[m]<=x)
return bs1(m,dr,x);
else
return bs1(st,m-1,x);
}
int bs2(int st,int dr, int x)
{
if (st==dr)
if (A[st]<=x)
return st;
else
return -1;
int m;
m=(st+dr+1)/2;
if (A[m]<=x)
return bs2(m,dr,x);
else
return bs2(st,m-1,x);
}
int bs3(int st,int dr, int x)
{
if (st==dr)
if (A[st]>=x)
return st;
else
return -1;
int m;
m=(st+dr)/2;
if (A[m]>=x)
return bs3(st,m,x);
else
return bs3(m+1,dr,x);
}
int main()
{
fi>>N;
for (int i=1;i<=N;i++)
fi>>A[i];
fi>>M;
for (int test=1;test<=M;test++)
{
int tip;
fi>>tip;
if (tip==0)
{
int x;
fi>>x;
/// ultima aparitie a lui x in sirul A
/// -1 daca nu apare
fo<<bs1(1,N,x)<<"\n";
continue;
}
if (tip==1)
{
int x;
fi>>x;
/// ultima aparitie din sirul A unde se afla
/// o valoare mai mica sau egala cu x
fo<<bs2(1,N,x)<<"\n";
continue;
}
if (tip==2)
{
int x;
fi>>x;
/// cea mai dinspre stanga pozitie din A unde se afla
/// o valoare mai mare sau egala cu x
fo<<bs3(1,N,x)<<"\n";
continue;
}
}
fi.close();
fo.close();
return 0;
}