Pagini recente » Cod sursa (job #1227001) | Cod sursa (job #2195103) | Cod sursa (job #659395) | Cod sursa (job #1250010) | Cod sursa (job #779292)
Cod sursa(job #779292)
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int i,n,a,b,m,mij,ls,ld,x,v[100001];
int main()
{f>>n;
for(i=1;i<=n;++i)
f>>v[i];
f>>m;
for(i=1;i<=m;++i)
{f>>b>>a;
if(b==0)
{ls=1; ld=n; x=-1;
mij=ls+(ld-ls)/2;
while(ls<=ld)
{if(a<v[mij])
ld=mij-1;
else
if(a>v[mij])
ls=mij+1;
else
if(a==v[mij])
{x=mij;
break;
}
mij=ls+(ld-ls)/2;
}
if(x>=0)
{while(v[x+1]==v[x])
++x;
g<<x<<'\n';
}}
else
if(b==1)
{ls=1; ld=n; x=-1;
mij=ls+(ld-ls)/2;
while(ls<=ld)
{if(a<v[mij])
ls=mij-1;
else
if(a>v[mij])
ld=mij+1;
else
if(a==v[mij])
{x=mij;
break;
}
mij=ls+(ld-ls)/2;
}
if(x>=0)
{while(v[x+1]==v[x])
++x;
g<<x<<'\n';
}
else
{if(v[ls]>x)
{while(v[ls-1]>=x)
--ls;
ls=ls-1;
g<<ls<<'\n';
}
else
{while(v[ls+1]<=x)
++ls;
g<<ls<<'\n';
}}}
else
if(b==2)
{ls=1; ld=n; x=-1;
mij=ls+(ld-ls)/2;
while(ls<=ld)
{if(a<v[mij])
ls=mij-1;
else
if(a>v[mij])
ld=mij+1;
else
if(a==v[mij])
{x=mij;
break;
}
mij=ls+(ld-ls)/2;
}
if(x>=0)
{while(v[x-1]==v[x])
--x;
g<<x<<'\n';
}
else
{if(v[ls]>x)
{while(v[ls-1]>=x)
--ls;
g<<ls<<'\n';
}
else
{while(v[ls+1]<=x)
++ls;
ls=ls+1;
g<<ls<<'\n';
}}}
}
return 0;
}