Pagini recente » Cod sursa (job #2292454) | Cod sursa (job #2531511) | Cod sursa (job #2351505) | Cod sursa (job #56833) | Cod sursa (job #2472405)
/*
#include <fstream>
#include <iostream>
using namespace std;
int v[100001],cerinta,nr,pozitie,n,r;
ofstream fout ("cautbin.out");
int cautarebinara(int a);
void citire();
void rez();
void afis();
int main()
{
citire();
}
void citire()
{
int m;
ifstream fin("cautbin.in");
fin>>n;
for(int i =1; i <=n; i++)
fin>>v[i];
fin>>m;
for (int i=1; i<=m; i++)
{
fin>>cerinta>>nr;
rez();
}
}
void rez()
{
switch(cerinta)
{
case 0:
pozitie=cautarebinara(nr);
if(pozitie!=-1)
{
for(int i=pozitie+1; i<=n; i++)
{
if(v[i]==nr)
pozitie=i;
else
break;
}
}
afis();
break;
case 1:
pozitie=cautarebinara(nr);
if(pozitie!=-1)
{
for(int i=pozitie+1; i<=n; i++)
{
if(v[i]==nr)
pozitie=i;
else
break;
}
afis();
}
else
for(int i=(int)r;i>=1;i--)
if(v[i]<nr)
{
pozitie=i;
afis();
break;
}
break;
case 2:
pozitie=cautarebinara(nr);
if(pozitie!=-1)
{
for(int i=pozitie; i>=1; i--)
{
if(v[i]==nr)
pozitie=i;
else
break;
}
afis();
}
else
for(int i=(int)r;i>=1;i--)
if(v[i]<nr)
{
pozitie=i+1;
afis();
break;
}
break;
}
}
int cautarebinara(int a)
{
int mid,sol=-1;
int left=1;
int r=n;
while(left<=r)
{
mid=(left+r)/2;
if(v[mid]==a)
{
sol=mid;
break;
}
if(a<v[mid])
r=mid-1;
if(a>v[mid])
left=mid+1;
}
return sol;
}
void afis()
{
fout<<pozitie<<'\n';
}
*/
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int x,n,caz,v[100001],i,t;
int caut0(int x)
{
int poz=-1,stanga=1,dreapta=n;
while(stanga<=dreapta)
{
int mij=(stanga+dreapta)/2;
if(x==v[mij])poz=mij;
if(x>=v[mij])stanga=mij+1;
else dreapta=mij-1;
}
return poz;
}
int caut1(int x)
{
int poz=-1,stanga=1,dreapta=n;
while(stanga<=dreapta)
{
int mij=(stanga+dreapta)/2;
if(x>=v[mij])
{
stanga=mij+1;
poz=mij;
}
else dreapta=mij-1;
}
return poz;
}
int caut2(int x)
{
int poz=1,stanga=1,dreapta=n;
while(stanga<=dreapta)
{
int mij=(stanga+dreapta)/2;
if(x<=v[mij]) {dreapta=mij-1;poz=mij;}
else stanga=mij+1;
}
return poz;
}
int main()
{
fin>>n;
for(i=1; i<=n; i++)fin>>v[i];
fin>>t;
while(t--){
fin>>caz>>x;
if(caz==0) fout<<caut0(x)<<'\n';
if(caz==1) fout<<caut1(x)<<'\n';
if(caz==2)fout<<caut2(x)<<'\n';
}
return 0;
}