Pagini recente » Cod sursa (job #1055252) | Cod sursa (job #2624318) | Cod sursa (job #4712) | Cod sursa (job #2029055) | Cod sursa (job #2682365)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int solve0(int x, int v[], int lo, int hi){
int m;
while(lo <= hi){
m = (lo + hi)/2;
if(v[m] <= x){
lo = m + 1;
}else{
hi = m - 1;
}
}
m = (hi + lo)/2;
if(v[m] > x){
m--;
}
if(v[m]==x){
return m+1;
}
return -1;
}
int solve1(int x, int v[], int lo, int hi){
int m, lo1, hi1;
for(;;x--){
lo1 = lo;
hi1 = hi;
while(lo1 <= hi1){
m = (lo1 + hi1)/2;
if(v[m] <= x){
lo1 = m + 1;
}else{
hi1 = m - 1;
}
}
m = (hi1 + lo1)/2;
if(v[m] > x){
m--;
}
if(v[m]==x){
return m+1;
}
}
}
int solve2(int x, int v[], int lo, int hi){
int m;
while(lo < hi){
m = (lo + hi)/2;
if(v[m] < x){
lo = m + 1;
}else{
hi = m;
}
}
m = (lo + hi)/2;
if(v[m] < x){
m++;
}
return m+1;
}
int main(){
int n, m;
f >> n;
int v[n];
for(int i = 0; i < n; i++){
f >> v[i];
}
f >> m;
while(m--){
int x, tip;
f >> tip >> x;
if(tip == 0){
g << solve0(x, v, 0, n-1);
}else if(tip == 1){
g << solve1(x, v, 0, n-1);
}else{
g << solve2(x-1, v, 0, n-1);
}
if(!m){
break;
}
g << "\n";
}
}