Pagini recente » Cod sursa (job #1273565) | Cod sursa (job #1579909) | Cod sursa (job #505511) | Cod sursa (job #1872531) | Cod sursa (job #1259455)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
long n,m;
long v[100002];
ifstream f("cautbin.in",ios::in);
ofstream g("cautbin.out",ios::out);
f>>n;
for(int i=1;i<=n;i++){
f>>v[i];
}
f>>m;
while(m){
int caz,x;
f>>caz>>x;
if(caz==0){
int left=1,right=n,mid;
int negasit=0;
mid=left+(right-left)/2;
while(v[mid]!=x){
if(x<v[mid]){
right=mid;
mid=left+(right-left)/2;
}
else{
left=mid;
mid=left+(right-left)/2+1;
}
if(mid==n&&v[n]!=x){
negasit=1;
break;
}
if(mid==1&&v[1]!=x){
negasit=1;
break;
}
}
if(negasit){
g<<"-1";
}
else{
while(v[mid+1]==x){
mid++;
}
g<<mid<<endl;
}
}
if(caz==1){
int left=1,right=n,mid;
int negasit=0;
mid=left+(right-left)/2;
while(v[mid]!=x){
if(x<=v[mid]){
right=mid;
mid=left+(right-left)/2;
}
else{
left=mid;
mid=left+(right-left)/2+1;
}
if(mid==n&&v[n]!=x){
while(v[n-1]==v[n]){
n--;
mid--;
}
mid--;
break;
}
}
while(v[mid]==v[mid+1]){
mid++;
}
g<<mid<<endl;
}
if(caz==2){
int left=1,right=n,mid;
int negasit=0;
mid=left+(right-left)/2;
while(v[mid]!=x){
if(x<=v[mid]){
right=mid;
mid=left+(right-left)/2;
}
else{
left=mid;
mid=left+(right-left)/2+1;
}
if(mid==1&&v[1]!=x){
mid++;
while(v[mid]==v[mid+1]){
mid++;
}
break;
}
}
while(v[mid]==v[mid-1]){
mid--;
}
g<<mid<<endl;
}
m--;
}
return 0;
}