Pagini recente » Cod sursa (job #1143739) | Borderou de evaluare (job #1569208) | Cod sursa (job #802089) | Cod sursa (job #757954) | Cod sursa (job #1635491)
#include <iostream>
#include <fstream>
#define nmax 100099
using namespace std;
int n,v[nmax];
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int cauta0(int x)
{int st,dr,mij;
st=1,dr=n;
while(st<=dr)
{mij=(st+dr)/2;
if(v[mij]<=x){st=mij+1;}
else dr=mij-1;
}
if(dr>0 && v[dr]==x)return dr;
return -1;
}
int cauta1(int x)
{int st,dr,mij;
st=1,dr=n;
while(st<=dr)
{mij=(st+dr)/2;
if(v[mij]<=x){st=mij+1;}
else dr=mij-1;
}
return dr;
}
int cauta2(int x)
{int st,dr,mij;
st=1,dr=n;
while(st<=dr)
{mij=(st+dr)/2;
if(x<=v[mij]){dr=mij-1;}
else st=mij+1;
}
return st;
}
int main()
{int i,x,y,t;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
fin>>t;
while(t--)
{fin>>x>>y;
if(x==0){fout<<cauta0(y)<<'\n';}
else if(x==1){fout<<cauta1(y)<<'\n';}
else fout<<cauta2(y)<<'\n';
}
}