Pagini recente » Cod sursa (job #1911284) | Cod sursa (job #2812159) | Cod sursa (job #74123) | Cod sursa (job #1343637) | Cod sursa (job #499767)
Cod sursa(job #499767)
#include<fstream.h>
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[100001],i,tip,st,dr,p,gasit,mij,x;
void caut0()
{
while(st<=dr&&!gasit)
{mij=st+(dr-st)/2;
if(v[mij]==x) gasit=1,p=mij;
else if(v[mij]<x) st=mij+1;
else dr=mij-1;}
if(gasit) while(v[p+1]==x) p++;
else p=-1;
}
void caut1()
{
while(st<=dr&&!gasit)
{mij=st+(dr-st)/2;
if(v[mij]==x) gasit=1,p=mij;
else if(v[mij]<x) st=mij+1;
else dr=mij-1;}
if(gasit) while(v[p+1]==x) p++;
else {p=dr;
if(v[p+1]<=x)p++;
else while(v[p]>x)p--;}
}
void caut2()
{
while(st<=dr&&!gasit)
{mij=st+(dr-st)/2;
if(v[mij]==x) gasit=1,p=mij;
else if(v[mij]<x) st=mij+1;
else dr=mij-1;}
if(gasit) while(v[p-1]==x) p--;
else {p=st;
if(v[p-1]>=x) p--;
else while(v[p]<x) p++;}
}
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>v[i];
f>>m;
while(m--)
{f>>tip>>x;
st=1;dr=n;gasit=0;
if(tip==0) caut0();
else if(tip==1) caut1();
else caut2();
g<<p<<'\n';}
f.close(); g.close();
return 0;
}