Pagini recente » Cod sursa (job #2448380) | Cod sursa (job #417136) | Cod sursa (job #2392842) | Cod sursa (job #543796) | Cod sursa (job #1374204)
#include<iostream>
#include<fstream>
#define NMAX 100001
#define inf 10000000
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m,v[NMAX],mx=0,mn=inf;
void caut0(int st,int dr,int x)
{
int mij;mx=0;
while(st<=dr)
{
mij=(st+dr)>>1;
if(x==v[mij])if(mij>mx)mx=mij;
if(x<v[mij])dr=mij-1;
if(x>=v[mij])st=mij+1;
}
if(mx==0)fout<<-1<<'\n';
else
fout<<mx<<'\n';
}
void caut1(int st,int dr,int x)
{ int mij;mx=0;
while(st<=dr)
{
mij=(st+dr)>>1;
if(x>=v[mij])if(mij>mx)mx=mij;
if(x<v[mij])dr=mij-1;
if(x>=v[mij])st=mij+1;
}
fout<<mx<<'\n';
}
void caut2(int st,int dr,int x)
{ int mij;mn=inf;
while(st<=dr)
{
mij=(st+dr)>>1;
if(x<=v[mij])if(mn>mij)mn=mij;
if(x<=v[mij])dr=mij-1;
if(x>v[mij])st=mij+1;
}
fout<<mn<<'\n';
}
int main()
{
fin>>n;int op,x;
for(int i=1;i<=n;i++)
fin>>v[i];
fin>>m;
for(int i=1;i<=m;i++)
{
fin>>op;
if(!op)
fin>>x,caut0(1,n,x);
else
if(op==1)fin>>x,caut1(1,n,x);
else
fin>>x,caut2(1,n,x);
}
fin.close();
fout.close();
return 0;
}