Pagini recente » Cod sursa (job #1975212) | Cod sursa (job #3235171) | Cod sursa (job #1955864) | Cod sursa (job #1652311) | Cod sursa (job #344794)
Cod sursa(job #344794)
#include <iostream.h>
#include <fstream.h>
int main()
{
long n,m,inc,sf,mij,pb,x,sir[100000],gasit,verif;
ifstream t("cautbin.in");
ofstream s("cautbin.out");
t>>n;
for(x=1;x<=n;x++)
t>>sir[x];
t>>m;
while(m!=0)
{ t>>pb; t>>x; m--;
inc=1; sf=n; mij=(inc+sf)/2; gasit=0; verif=0;
if(pb==0)
{ while((inc<=sf)&&(gasit==0))
{ if((x==sir[mij])&&(sir[mij+1]>x))
{ s<<mij;
gasit=1;
}
else if(x==sir[mij]) while(x==sir[mij]) {mij++; verif=1;}
if(verif==1) {s<<mij-1; gasit=1;}
if(x<=sir[mij]) sf=mij-1;
else inc=mij+1;
mij=(inc+sf)/2;
}
if (gasit==0) s<<"-1";
}
if (pb==1)
{ while((inc<=sf)&&(gasit==0))
{if((sir[mij]<=x)&&(sir[mij+1]>x))
{ s<<mij;
gasit=1;
}
else if(x==sir[mij]) while(x==sir[mij]) {mij++; verif=1;}
if(verif==1) {s<<mij-1; gasit=1;}
if(x<=sir[mij]) sf=mij-1;
else inc=mij+1;
mij=(inc+sf)/2;
}
}
if(pb==2)
{ while((inc<=sf)&&(gasit==0))
{if((sir[mij]>=x)&&(sir[mij+1]>x)&&(sir[mij-1]<x))
{ s<<mij;
gasit=1;
}
else if((x==sir[mij])||(x==sir[mij-1]))
{ if(x==sir[mij-1])
mij=mij-1;
while(x==sir[mij])
{mij--;
verif=1;
}
}
if(verif==1) {s<<mij+1; gasit=1;}
if(x<=sir[mij]) sf=mij-1;
else inc=mij+1;
mij=(inc+sf)/2;
}
}
}
}