Pagini recente » Cod sursa (job #1810912) | Cod sursa (job #957199) | Cod sursa (job #2878072) | Cod sursa (job #866878) | Cod sursa (job #3265025)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
long long v[100001];
int CautBin(int st, int dr, long long val)
{
while (st<=dr)
{
int mij = (st+dr)/2;
if (v[mij]==val)
{
return mij;
}
else
{
if (v[mij]>=val)
{
dr = mij-1;
}
else
{
st = mij+1;
}
}
}
return -1;
}
int CautBin1(int st, int dr, long long val)
{
while (st<=dr)
{
int mij = (st+dr)/2;
if (v[mij]==val)
{
return mij;
}
else
{
if (v[mij]>=val)
{
dr = mij-1;
}
else
{
st = mij+1;
}
}
}
return st;
}
int main()
{
int n,m,c;
long long val;
in>>n;
for (int i=1; i<=n; i++)
{
in>>v[i];
}
in>>m;
for (int i=1; i<=m; i++)
{
in>>c>>val;
if (c==0)
{
int j = CautBin(1,n,val);
if (j==-1)
{
out<<j<<'\n';
}
else
{
while (v[j+1]==val)
j++;
out << j << '\n';
}
}
else if (c==1)
{
int j=CautBin1(1,n,val);
while (v[j+1]<=val)
j++;
out << j << '\n';
}
else if (c==2)
{
int j=CautBin1(1,n,val);
while (v[j-1]>=val)
j--;
out << j << '\n';
}
}
return 0;
}