Pagini recente » Cod sursa (job #1118069) | Cod sursa (job #1794518) | Cod sursa (job #1342620) | Cod sursa (job #3150893) | Cod sursa (job #522050)
Cod sursa(job #522050)
#include <fstream>
using namespace std;
int n,a[100001],m,x,y;
int bin_search0(int st, int dr, int x)
{
int mij;
while(st <= dr)
{
mij = (st + dr) / 2;
if(a[mij] <= x)
st = mij + 1;
else
dr = mij - 1;
}
mij = (st + dr) / 2;
if(a[mij] > x)
--mij;
if(a[mij] == x)
return mij;
else return -1;
}
int bin_search1(int st, int dr, int x)
{
int mij;
while(st < dr)
{
mij = (st + dr) / 2;
if(a[mij] <= x) st = mij + 1;
else dr = mij;
}
mij = (st + dr) / 2;
if(a[mij] > x)
--mij;
return mij;
}
int bin_search2(int st, int dr, int x)
{
int mij;
while(st < dr)
{
mij = (st + dr) / 2;
if(a[mij] >= x) dr = mij;
else st = mij + 1;
}
mij = (st + dr) / 2;
if(a[mij] < x)
++mij;
return mij;
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
for(int i = 1; i <= n; ++i)
f>>a[i];
f>>m;
for(int i = 1; i <= m; ++i)
{
f>>y>>x;
if(y == 0)g<<bin_search0(1, n, x)<<'\n';
else
if(y == 1)g<<bin_search1(1, n, x)<<'\n';
else
if(y == 2)g<<bin_search2(1, n, x)<<'\n';
}
f.close();
g.close();
return 0;
}