Pagini recente » Cod sursa (job #2804019) | Cod sursa (job #1860163) | Cod sursa (job #876258) | Cod sursa (job #85446) | Cod sursa (job #948985)
Cod sursa(job #948985)
#include<fstream>
#define IN "cautbin.in"
#define OUT "cautbin.out"
#define MAX 100000
using namespace std;
ifstream in(IN);
ofstream out(OUT);
int N, M, i, v[MAX], pos, nr, st, dr, mijl, posFav, k;
bool ok;
int main()
{
in>>N;
for(i=0; i<N; i++)
in>>v[i];
in>>M;
for(i=0; i<M; i++)
{
in>>pos>>nr;
if(pos==0)
{
posFav=-1;
st=0, dr=N-1;
while(st<=dr)
{
mijl=(st+dr)/2;
if(v[mijl]==nr)
posFav=mijl, st=dr+1;
else
if(nr<v[mijl])
dr=mijl-1;
else
st=mijl+1;
}
if(posFav==-1)
out<<"-1\n";
else
{
while(v[++posFav]==nr)
;
out<<posFav<<'\n';
}
}
else if(pos==1)
{
posFav=-1;
st=0, dr=N-1;
while(st<=dr)
{
mijl=(st+dr)/2;
if(v[mijl]==nr)
posFav=mijl, st=dr+1;
else
if(nr<v[mijl])
dr=mijl-1;
else
st=mijl+1;
}
/*out<<dr<<endl;*/
if(posFav==-1)
out<<dr+1<<'\n';
else
{
/*ok=0;
for(k=posFav-1; k>=0; k--)
if(v[posFav]!=v[k]){
out<<k+2<<'\n',
ok=1;
break;
}
if(!ok)*/
for(k=posFav+1; k<N; k++)
if(v[posFav]!=v[k]){
out<<k<<'\n';
break;
}
//out<<posFav<<endl;
}
}
else if(pos==2)
{
posFav=-1;
st=0, dr=N-1;
while(st<=dr)
{
mijl=(st+dr)/2;
if(v[mijl]==nr)
posFav=mijl, st=dr+1;
else
if(nr<v[mijl])
dr=mijl-1;
else
st=mijl+1;
}
if(posFav==-1)
out<<st+1<<'\n';
else
{
/*ok=0;
for(k=posFav+1; k<N; k++)
if(v[posFav]!=v[k]){
out<<k<<'\n',
ok=1;
break;
}*/
if(!ok)
for(k=posFav-1; k>=0; k--)
if(v[posFav]!=v[k]){
out<<k+2<<'\n';
break;
}
//out<<posFav<<endl;
}
}
}
in.close();
out.close();
return 0;
}