Pagini recente » Cod sursa (job #2147665) | Cod sursa (job #1731169) | Cod sursa (job #3135518) | Cod sursa (job #1398825) | Cod sursa (job #2682780)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int solve0(int x, int v[], int s, int d){
int m;
while(s < d){
m = (s + d) / 2;
if(v[m] <= x)
s = m + 1;
else
d = m - 1;
}
m = (s + d) / 2;
if (v[m] > x)
m--;
if(v[m] == x)
return m;
return -1;
}
int solve1(int x, int v[], int s, int d){
int m;
while(s <= d){
m = (s + d) / 2;
if(v[m] <= x)
s = m + 1;
else
d = m - 1;
}
m = (s + d) / 2;
if(v[m] > x)
m--;
return m;
}
int solve2(int x, int v[], int s, int d){
int m;
while(s <= d){
m = s + (d - s)/2;
if(v[m] < x)
s = m + 1;
else
d = m - 1;
}
m = s + (d - s)/2;
if(v[m] < x)
m++;
return m;
}
int main(){
int n, m, tip, x;
f >> n;
int v[n];
for(int i = 1; i <= n; i++){
f >> v[i];
}
f >> m;
while(m--){
f >> tip >> x;
if(tip == 0){
g << solve0(x, v, 1, n);
}else if(tip == 1){
g << solve1(x, v, 1, n);
}else{
g << solve2(x, v, 1, n);
}
if(!m){
break;
}
g << "\n";
}
}