Pagini recente » Cod sursa (job #2898139) | Cod sursa (job #2229735) | Cod sursa (job #1149556) | Cod sursa (job #1195035) | Cod sursa (job #1766703)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100100],N,M,Q,X;
int 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--;
if(v[mi]==X) return mi;
return -1;
}
int solve1(){
int st=1, dr=N, mi;
while(st<dr)
{
mi=(st+dr)/2;
if(v[mi]<=X)
st=mi+1;
else
dr=mi;
}
mi=(st+dr)/2;
if(v[mi]>X) mi--;
return mi;
}
int solve2(){
int st=1, dr=N, mi;
while(st<dr)
{
mi=(st+dr)/2;
if(v[mi]<X)
st=mi+1;
else
dr=mi;
}
mi=(st+dr)/2;
if(v[mi]<X && mi<N)
mi++;
if(v[mi]<X)
--mi;
return mi;
}
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)
fout<<solve0()<<'\n';
if(Q==1)
fout<<solve1()<<'\n';
if(Q==2)
fout<<solve2()<<'\n';
}
return 0;
}