Pagini recente » Istoria paginii utilizator/cristinabelavici | Cod sursa (job #2770191) | Cod sursa (job #2215016) | Cod sursa (job #2455197) | Cod sursa (job #819982)
Cod sursa(job #819982)
#include <cstdio>
int v[100005];
int bin0 (int l, int r, int k){
int mid=l+(r-l)/2;
if (k<v[l] || k>v[r]) return -1;
else if (v[l]==k) return l;
else if (v[r]==k) return r;
else if (v[mid]==k) return mid;
else if (k<v[mid]) return bin0 (l, mid-1, k);
else return bin0 (mid+1, r, k);
}
int bin1 (int l, int r, int k){
int mid=l+(r-l)/2;
if (k==v[mid]) return mid;
else if (k>v[mid]) return bin1 (l, mid-1, k);
else return bin1 (mid+1, r, k);
}
int bin2 (int l, int r, int k){
int mid=l+(r-l)/2;
if (k==v[mid]) return mid;
else if (k<v[mid]) return bin2 (l, mid-1, k);
else return bin2 (mid+1, r, k);
}
int main (){
freopen ("cautbin.in", "r", stdin);
freopen ("cautbin.out", "w", stdout);
int n, m;
scanf ("%d", &n);
for (int i=1; i<=n; i++)
scanf ("%d", &v[i]);
scanf ("%d", &m);
int p;
for (int i=1; i<=m; i++){
scanf ("%d", &p);
int k;
scanf ("%d", &k);
if (p==0){
int s;
s=bin0(1, n, k);
while (v[s]==k) s++;
printf ("%d\n", s-1);
}
if (p==1){
int s=bin1 (1, n, k);
while (v[s]==v[s+1]) s++;
printf ("%d\n", s);
}
if (p==2){
int s=bin2 (1, n, k);
while (v[s]==v[s-1]) s--;
printf ("%d\n", s);
}
}
return 0;
}