Pagini recente » Cod sursa (job #2744345) | Cod sursa (job #2769245) | Cod sursa (job #2652325) | Cod sursa (job #1358773) | Cod sursa (job #1150480)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[1001],i,ex,v,m;
int CautMaxN(int v);
int cautMaxim(int v);
int cautMinim(int v);
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(i=1;i<=m;i++)
{
fin>>ex>>v;
if(ex==0)
{
fout<<CautMaxN(v)<<'\n';
}
if(ex==1)
{
fout<<cautMaxim(v)<<'\n';
}
if(ex==2)
{
fout<<cautMinim(v)<<'\n';
}
}
}
int CautMaxN(int v)
{
int i,x=-1,inc=1,sf=n,mij;
while(sf>=inc)
{
mij=(sf+inc)/2;
if(v==a[mij])
{
x=mij;
break;
}
else
{
if(v<a[mij])
sf=mij-1;
else
inc=mij+1;
}
}
if(x==-1)
return -1;
else
for(i=x;i<=n;i++)
if(a[i]!=a[x])
{
return i-1;
}
}
int cautMaxim(int x) {
int p = 1, u = n, mid;
while (p<=u) {
mid = (p+u)/2;
if (x>=a[mid]) {
p = mid+1;
} else {
u = mid-1;
}
}
if (a[u] == x)
return u;
else
return -1;
}
int cautMinim(int x)
{
int p = 1, u = n, mid;
while (p<=u) {
mid = (p+u)/2;
if (x<=a[mid]) {
u = mid-1;
} else {
p = mid+1;
}
}
if (a[p] == x)
return p;
else
return -1;
}