Pagini recente » Cod sursa (job #2707006) | Cod sursa (job #1642846) | Cod sursa (job #1492560) | Cod sursa (job #1791334) | Cod sursa (job #1957814)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n,m,a[NMAX],i,j,tip,caut,poz;
int cautbin0(int st,int dr, int x){
int mij,k=0;
while(st<=dr){
mij=st + (dr-st)/2;
if(x==a[mij]){
k=mij+1;
while(a[k]==x)
k++;
return --k;
}
if (x>a[mij])
st=mij+1;
if (x<a[mij])
dr=mij-1;
}
return -1;
}
int cautbin1(int st,int dr, int x){
int mij,k=0;
while(st<dr-1){
mij=st + (dr-st)/2;
if(x==a[mij]){
k=mij+1;
while(a[k]==x)
k++;
return --k;
}
if (x>a[mij]){
st=mij;poz=mij;
}
if (x<a[mij]){
dr=mij;poz=mij-1;
}
}
return poz;
}
int cautbin2(int st,int dr, int x){
int mij,k=0;
while(st<dr-1){
mij=st + (dr-st)/2;
if(x==a[mij]){
k=mij-1;
while(a[k]==x)
k--;
return ++k;
}
if (x>a[mij]){
st=mij;poz=mij+1;
}
if (x<a[mij]){
dr=mij;poz=mij;
}
}
return poz;
}
int main(){
fin>>n;
for( i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(i=1;i<=m;i++){
fin>>tip>>caut;
if(tip==0)
fout<<cautbin0(1,n,caut)<<'\n';
if(tip==1)
fout<<cautbin1(1,n,caut)<<'\n';
if(tip==2)
fout<<cautbin2(1,n,caut)<<'\n';
}
return 0;
}