Pagini recente » Cod sursa (job #476973) | Cod sursa (job #105648) | Cod sursa (job #292751) | Cod sursa (job #1693883) | Cod sursa (job #2276025)
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n, v[NMAX], m;
void citire()
{fin>>n;
int i;
for(i = 1; i <= n; i++)
fin>>v[i];
fin>>m;
}
void rezolva_0(int x)
{ int st, dr, mijl,p;
bool ok = 0;
st = 1;
dr = n;
while(st < dr)
{mijl = (st+dr)/2;
if(v[mijl] > x)
dr = mijl;
else
if(v[mijl] < x)
st = mijl;
else
if(v[mijl] == x && v[mijl+1] != x)
{p = mijl;
ok = 1;
break;
}
else
st = mijl;
}
if(!ok)
fout<<'-1';
else
fout<<p;
fout<<'\n';
}
void rezolva_1(int x)
{int st, dr, mijl,p;
st = 1;
dr = n;
while(st < dr)
{mijl = (st+dr)/2;
if(v[mijl] > x)
dr = mijl;
else
if(v[mijl] <= x && v[mijl+1] > x)
{p = mijl;
break;
}
else
st = mijl;
}
fout<<p<<'\n';
}
void rezolva_2(int x)
{
int st, dr, mijl,p;
st = 1;
dr = n;
while(st < dr)
{mijl = (st+dr)/2;
if(v[mijl] >= x && v[mijl-1] < x)
{p = mijl;
break;
}
else
if(v[mijl] < x)
st = mijl;
else
dr = mijl;
}
fout<<p<<'\n';
}
int main()
{ citire();
int i, x, y;
for(i = 1; i <= m; i++)
{fin>>y>>x;
if(y == 0)
rezolva_0(x);
else
if(y == 1)
rezolva_1(x);
else
rezolva_2(x);
}
fin.close();
fout.close();
return 0;
}