Pagini recente » Cod sursa (job #3220884) | Cod sursa (job #33227) | Cod sursa (job #607810) | Cod sursa (job #592650) | Cod sursa (job #1506182)
#include <fstream>
using namespace std;
int v[100002];
int main()
{
FILE *fin=fopen ("cautbin.in","r");
FILE *fout=fopen ("cautbin.out","w");
int i,n,m,cer,x,st,dr,mid,p;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++) fscanf (fin,"%d",&v[i]);
fscanf (fin,"%d",&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d %d",&cer,&x);
if (cer==0){
// trebuie sa gasim cea mai mare pozitie pe care se afla un element cu valoarea x
// sau -1 daca nu exista
st=1;
dr=n;
while (st<=dr){
mid=(st+dr)/2;
if (v[mid]<=x) st=mid+1;
else dr=mid-1;
}
if (v[dr]==x)
fprintf (fout,"%d\n",dr);
else
fprintf (fout,"-1\n");
}
else if (cer==1){
// trebuie sa afisam cea mai mare pozitie
//pe care se afla un element cu valoarea mai mica sau egala cu x in sir.
p=x;
st=1;
dr=n;
while (st<=dr){
mid=(st+dr)/2;
if (v[mid]<=p)
st=mid+1;
else
dr=mid-1;
}
fprintf (fout,"%d\n",dr);
}
else {
// trebuie sa afisam cea mai mica pozitie
//pe care se afla un element cu valoarea mai mare sau egala cu x in sir.
p=x;
st=1;
dr=n;
while (st<=dr){
mid=(st+dr)/2;
if (v[mid]<p)
st=mid+1;
else
dr=mid-1;
}
fprintf (fout,"%d\n",st);
}
}
return 0;
}