Pagini recente » Cod sursa (job #56014) | Cod sursa (job #2405653) | Cod sursa (job #388116) | Cod sursa (job #2944109) | Cod sursa (job #2969542)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100005],m;
/**int cautbin0(int x)
{
int st=1,dr=n,poz=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(x>a[mij])
st=mij+1;
if(x<a[mij])
dr=mij-1;
// fout<<a[mij]<<" "<<mij<<"\n";
if(x==a[mij])
{
poz=mij;
st=mij+1;
//fout<<poz<<"\n";
}
//fout<<st<<" "<<dr<<" "<<mij<<"\n";
}
return poz;
}
int cautbin1(int x)
{
int st=1,dr=n,poz=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(x>=a[mij]){
st=mij+1;
poz=mij;
}
if(x<a[mij])
dr=mij-1;
}
return poz;
}
*/
int cautbin2(int x)
{
int st=1,dr=n,poz=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(x>a[mij]){
st=mij+1;
}
if(x<=a[mij]){
dr=mij-1;
poz=mij;
}
}
return poz;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(int i=1;i<=m;i++)
{
// implementare cu upper_bound din stl
int c,x;
int y;
fin>>c>>x;
if(c==0){
//fout<<cautbin0(x)<<"\n";
y=upper_bound(a+1,a+n+1,x)-a-1;
if(y<=n && y>=1 && a[y]==x)
fout<<y<<"\n";
else fout<<-1<<"\n";
}
if(c==1){
// fout<<cautbin1(x)<<"\n";
y=lower_bound(a+1,a+n+1,x+1)-a-1;
fout<<y<<"\n";
}
if(c==2){
//fout<<cautbin2(x)<<"\n";
y=upper_bound(a+1,a+n+1,x-1)-a;
fout<<y<<"\n";
}
}
return 0;
}