Pagini recente » Cod sursa (job #679352) | Cod sursa (job #31896) | Cod sursa (job #1740954) | Cod sursa (job #1910221) | Cod sursa (job #2610934)
#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 + 1;
break;
}
if ( array[mid] <= elem )
st = mid + 1;
else
dr = mid - 1;
}
g << sol<< "\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 == 0 || array[mid - 1] < elem)){
sol = mid + 1;
break;
}
if(array[mid] >= elem)
dr = mid - 1;
else
st = mid + 1;
}
g << sol<< "\n";
}
}
}
return 0;
}