Pagini recente » Cod sursa (job #3179991) | Cod sursa (job #1758744) | Cod sursa (job #285800) | Cod sursa (job #678428) | Cod sursa (job #2609964)
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, array[100001];
f >> n;
for(int i = 0; i < n; ++i ){
f >> array[i];
}
int m;
f >> m;
int key, elem;
for(int i = 0; i < m; ++i ){
f >> key >> elem;
if ( key == 0 ) {
int st = 0;
int dr = n - 1;
int sol = -2;
while (st <= dr) {
int mid = (st + dr) / 2;
if (elem < array[mid])
dr = mid - 1;
else
if (elem > array[mid])
st = mid + 1;
else
if(elem == array[mid] && ( mid == n - 1 || array[mid + 1] > elem ))
{
sol = mid;
break;
}
else
st = mid + 1;
}
g << sol + 1<<"\n";
}
else
if ( key == 1 ){
int st = 0;
int dr = n - 1;
int sol = -2;
while (st <= dr){
int mid = ( st + dr) / 2;
if( array[mid] == elem && (mid == n - 1 || elem < array[mid + 1]))
{
sol = mid;
break;
}else
if( array[mid] < elem && (mid == n - 1 || elem < array[mid + 1]))
{
sol = mid;
break;
} else
if ( array[mid] > elem )
dr = mid - 1;
else
st = mid + 1;
}
g << sol + 1 << "\n";
}
if ( key == 2 ){
int st = 0;
int dr = n - 1;
int sol = -2;
if ( elem < array[0])
g << 1 << "\n";
else{
while (st <= dr){
int mid = (st + dr) / 2;
if ( elem == array[mid] && ( mid == n - 1 || array[mid + 1] > elem)){
sol = mid;
break;
} else
if ( elem > array[mid] && ( mid == n - 1|| array[mid + 1] > elem)){
sol = mid + 1;
break;
} else
if(array[mid] > elem)
dr = mid - 1;
else
st = mid + 1;
}
g << sol + 1<< "\n";
}
}
}
return 0;
}