Pagini recente » Cod sursa (job #1621951) | Cod sursa (job #1535517) | Cod sursa (job #2154420) | Cod sursa (job #1393797) | Cod sursa (job #2224812)
#include <iostream>
#include <fstream>
using namespace std;
int num[100005];
int caut(int st, int dr, int val){
int mid;
while(st <= dr){
mid = (st + dr) / 2;
if(num[mid] < val)
st = mid + 1;
if(num[mid] > val)
dr = mid - 1;
if(num[mid] == val)
return mid;
}
return -1;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> num[i];
int m, op, x;
fin >> m;
for(int q = 1; q <= m; ++q){
fin >> op >> x;
int mid = caut(1, n, x);
if(op == 0){
if(mid == -1)
fout << -1;
else{
while(num[mid] == x && mid > 0)
mid--;
mid++;
fout << mid;
}
}
if(op == 1){
if(mid == - 1){
mid = caut(1, n, x - 1);
while(num[mid] == x - 1 && mid <= n)
mid++;
if(mid > 0)
mid--;
}
else{
while(num[mid] == x && mid <= n)
mid++;
mid--;
}
fout << mid;
}
if(op == 2){
if(mid == -1){
mid = caut(1, n, x + 1);
while(num[mid] == x + 1 && mid > 0)
mid--;
if(mid > 0)
mid++;
}
else{
while(num[mid] == x && mid <= n)
mid++;
mid--;
}
fout << mid;
}
fout << "\n";
}
return 0;
}