Pagini recente » Cod sursa (job #2213097) | Cod sursa (job #2055592) | Cod sursa (job #969526) | Cod sursa (job #2747385) | Cod sursa (job #1957793)
#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;
void 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++;
k--;
fout<<k<<'\n';
return;
}
if (x>a[mij])
st=mij+1;
if (x<a[mij])
dr=mij-1;
}
fout<<-1;
}
void 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++;
k--;
fout<<k;
return;
}
if (x>a[mij]){
st=mij;poz=mij;
}
if (x<a[mij]){
dr=mij;poz=mij-1;
}
}
fout<<poz<<'\n';
}
void 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++;
k--;
fout<<k;
return;
}
if (x>a[mij]){
st=mij;poz=mij+1;
}
if (x<a[mij]){
dr=mij;poz=mij;
}
}
fout<<poz<<'\n';
}
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)
cautbin0(1,n,caut);
if(tip==1)
cautbin1(1,n,caut);
if(tip==2)
cautbin2(1,n,caut);
}
return 0;
}