Pagini recente » Cod sursa (job #3242457) | Cod sursa (job #2219141) | Cod sursa (job #1557803) | Cod sursa (job #2735200) | Cod sursa (job #1766701)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100100],N,M,Q,X;
inline void solve0(){
int st=1, dr=N, mi;
while(st<=dr)
{
mi=(st+dr)/2;
if(v[mi]<=X)
st=mi+1;
else
dr=mi-1;
}
mi=(st+dr)/2;
if(v[mi]>X && mi>1)
--mi;
if(v[mi]==X)
fout<<mi<<'\n';
else
fout<<-1<<'\n';
}
inline void solve1(){
int st=1, dr=N, mi;
while(st<=dr)
{
mi=(st+dr)/2;
if(v[X]<=X)
st=mi+1;
else
dr=mi-1;
}
mi=(st+dr)/2;
if(v[mi]>X && mi>1)
--mi;
if(v[mi]<=X)
fout<<mi<<'\n';
else
fout<<-1<<'\n';
}
inline void solve2(){
int st=1, dr=N, mi;
while(st<=dr)
{
mi=(st+dr)/2;
if(v[mi]>=X)
dr=mi-1;
else
st=mi+1;
}
mi=(st+dr)/2;
if(v[mi]<X && mi<N)
mi++;
if(v[mi]>=X)
fout<<mi<<'\n';
else
fout<<-1<<'\n';
}
int main()
{
fin>>N;
for(int i=1;i<=N;i++)
fin>>v[i];
fin>>M;
for(int i=1;i<=M;i++)
{
fin>>Q>>X;
if(Q==0)
solve0();
if(Q==1)
solve1();
if(Q==2)
solve2();
}
return 0;
}