Pagini recente » Cod sursa (job #2930993) | Cod sursa (job #526190) | Cod sursa (job #952403) | Cod sursa (job #3185677) | Cod sursa (job #2762084)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
const int N = 1e5 + 5;
int n;
int v[N];
void solve0(int x) {
int st=1, dr=n, mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<x)
st=mij+1;
if(v[mij]>x)
dr=mij-1;
if(v[mij]==x)
{
if(v[mij+1]==x)
st=mij+1;
if(v[mij+1]!=x) {
cout<<mij << '\n';
return;
}
}
}
cout << "-1\n";
}
void solve1(int x) {
int st = 1, dr = n, mij, ans = 1;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[mij] > x) {
dr = mij - 1;
} else { ///v[mij] <= x
ans = mij;
st = mij + 1;
}
}
cout << ans << '\n';
}
void solve2(int x) {
int st=1, dr=n, mij, ans;
while(st<= dr)
{
mij=(st+dr)/2;
if(v[mij]<x)
{
st=mij+1;
}
else {
ans=mij;
dr=mij-1;
}
}
cout << ans << '\n';
}
int main() {
int q, type, x;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
cin >> q;
while (q--) {
cin >> type >> x;
if (type == 0)
solve0(x);
if (type == 1)
solve1(x);
if (type == 2)
solve2(x);
}
return 0;
}