Pagini recente » Cod sursa (job #2729611) | Cod sursa (job #1017295) | Cod sursa (job #339669) | Cod sursa (job #2733885) | Cod sursa (job #2158350)
#include <iostream>
#include <fstream>
#define nmax 100001
using namespace std;
FILE*fin=fopen("cautbin.in","r");
FILE*fout=fopen("cautbin.out","w");
int v[nmax],N,tip,val,m,valoare;
void cauta0(int valoare)
{
int st=1,dr=N,poz=-1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]==valoare)
{
poz=mij;
st=mij+1;
}
else if(v[mij]<valoare)
st=mij+1;
else dr=mij-1;
}
fprintf(fout,"%d\n",poz);
}
void cauta1(int valoare)
{
int st=1,dr=N,mij,poz=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<=valoare)
{
st=mij+1;
poz=mij;
}
else dr=mij-1;
}
fprintf(fout,"%d\n",poz);
}
void cauta2(int valoare)
{
int st=1,mij,dr=N,poz=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(valoare<=v[mij])
{
dr=mij-1;
poz=mij;
}
else st=mij+1;
}
fprintf(fout,"%d\n",poz);
}
int main()
{
fscanf(fin,"%d",&N);
for(int i =1 ; i <= N; i++)
fscanf(fin,"%d",&v[i]);
fscanf(fin,"%d",&m);
for(int i =1 ; i <= m; i++)
{
fscanf(fin,"%d %d",&tip,&valoare);
if(tip==0) cauta0(valoare);
else if(tip==1) cauta1(valoare);
else cauta2(valoare);
}
return 0;
}