Pagini recente » Cod sursa (job #2026158) | Cod sursa (job #1596049) | Cod sursa (job #694354) | Cod sursa (job #252550) | Cod sursa (job #1120727)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
long i,n,m,v[100001],a,b,inc,sf,mj,ok;
void func0(int a)
{
inc=1; sf=n; ok=0;
while(inc<=sf)
{
mj=(inc+sf)/2;
if(v[mj]==a) {ok=1; break;}
if(v[mj]>a) sf=mj-1;
if(v[mj]<a) inc=mj+1;
}
if(ok==0) fout<<"-1"<<'\n';
else
{
int i=mj+1;
while(v[i]==a && i<=n) i++;
fout<<i-1<<'\n';
}
}
void func1(int a)
{
inc=1; sf=n; ok=0;
while(inc<sf)
{
mj=(inc+sf)/2;
if(v[mj]==a) {ok=1; break;}
if(v[mj]>a) sf=mj-1;
if(v[mj]<a) inc=mj+1;
}
if(v[mj]>a) mj--;
if(ok==0) a=v[mj];
int i=mj+1;
while(v[i]==a && i<=n) i++;
fout<<i-1<<'\n';
}
void func2(int a)
{
inc=1; sf=n; ok=0;
while(inc<=sf)
{
mj=(inc+sf)/2;
if(v[mj]==a) {ok=1; break;}
if(v[mj]>a) sf=mj-1;
if(v[mj]<a) inc=mj+1;
}
if(v[mj]<a) mj++;
if(ok==0) a=v[mj];
int i=mj-1;
while(v[i]==a && i>=1) i--;
fout<<i+1<<'\n';
}
int main()
{
fin>>n;
for(i=1;i<=n;i++) fin>>v[i];
fin>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b;
if(a==0) func0(b);
else
if(a==1) func1(b);
else func2(b);
}
return 0;
}