Pagini recente » Cod sursa (job #137322) | Cod sursa (job #672978) | Cod sursa (job #166182) | Cod sursa (job #1111685) | Cod sursa (job #2061560)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int N = 100000;
int v[N];
int n,m;
int indexOf(int x){
int left = 0;
int right = n-1;
while(left != right){
int middle = (left + right) / 2;
if(x <= v[middle])
right = middle;
else /// (x > v[middle])
left = middle+1;
}
return left;
}
int query(int tip, int nr){
if(tip == 0){
int index = indexOf(nr);
if(v[index] != nr)
return -2;
else{
while(index < n-1 && v[index+1] == v[index]) /// Find the maximal index
++index;
return index;
}
}
else if(tip == 1){
int index = indexOf(nr);
while(v[index] > nr) /// Never overflows. Guaranteed!
--index;
while(index < n-1 && v[index+1] == v[index]) /// Find the maximal index
++index;
return index;
}
else if(tip == 2){
int index = indexOf(nr);
while(v[index] < nr) /// Never...
++index;
while(index > 0 && v[index-1] == v[index]) /// Find the minimal index
--index;
return index;
}
return -1;
}
int main()
{
in>>n;
for(int i=0; i<n; ++i)
in>>v[i];
in>>m;
for(int i=0; i<m; ++i)
{
int tip,x;
in>>tip>>x;
cout<<(query(tip, x)+1)<<"\n";
}
return 0;
}