Pagini recente » Cod sursa (job #2053650) | Cod sursa (job #1344848) | Cod sursa (job #1344046) | Cod sursa (job #735519) | Cod sursa (job #1260144)
#include <fstream>
using namespace std;
int main()
{
int n,m,i,caz,x,left=1,right,mid,negasit=0;
int v[100];
ifstream f("cautbin.in",ios::in);
ofstream g("cautbin.out",ios::out);
f>>n;
right=n;
for(i=1;i<=n;i++){
f>>v[i];
}
f>>m;
while(m){
f>>caz>>x;
if(caz==0){
left=1;right=n;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"<<"\n";
}
else{
while(v[mid+1]==x){
mid++;
}
g<<mid<<"\n";
}
}
if(caz==1){
left=1;right=n;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<<"\n";
}
if(caz==2){
left=1;right=n;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<<"\n";
}
m--;
}
f.close();
g.close();
return 0;
}