Pagini recente » Cod sursa (job #972197) | Cod sursa (job #2524483) | Cod sursa (job #2679317) | Cod sursa (job #3163765) | Cod sursa (job #1115888)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[100009];
int Solve1(int val)
{
int st = 1, dr = n, m, ok=0;
while(st <= dr && !ok)
{
m = (st + dr) / 2;
if(v[m] == val) ok = 1;
else if(v[m] < val)
st = m + 1;
else
dr = m - 1;
}
if(ok == 1)
{
while(v[m] == v[m+1]) m++;
return m;
}
else return -1;
}
int Solve2(int val)
{
int st = 1, dr = n, m, ok=0;
while(st <= dr && !ok)
{
m = (st + dr) / 2;
if(v[m] == val) ok = 1;
else if(v[m] < val)
st = m + 1;
else
dr = m - 1;
}
if(ok == 1)
{
while(v[m] == v[m+1]) m++;
return m;
}
else
{
m = (st+dr)/2;
if(v[m] > val)
m--;
return m;
}
}
int Solve3(int val)
{
int st = 1, dr = n, m, ok=0;
while(st <= dr && !ok)
{
m = (st + dr) / 2;
if(v[m] == val) ok = 1;
else if(v[m] < val)
st = m + 1;
else
dr = m - 1;
}
if(ok == 1)
{
while(v[m] == v[m-1]) m--;
return m;
}
else
{
m = (st+dr)/2;
if(v[m] < val)
m++;
return m;
}
}
int main()
{
int tip, val;
f >> n;
for(int i=1; i<=n; i++)
f >> v[i];
f >> m;
for(int i=1; i<=m; i++)
{
f >> tip >> val;
if(tip == 0)
g << Solve1(val) << '\n';
if(tip == 1)
g << Solve2(val) << '\n';
if(tip == 2)
g << Solve3(val) << '\n';
}
g.close();
return 0;
}