Pagini recente » Cod sursa (job #2392015) | Cod sursa (job #516732) | Cod sursa (job #1983279) | Cod sursa (job #2365126) | Cod sursa (job #2075752)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int N,i,M,j,Q,v[100001],f,I,st,dr,mij;
short Z;
int zero (int p)
{
st=0; dr=N-1;
while (st!=dr)
{
mij=(st+dr)/2;
if ( p<=v[mij] )
dr=mij;
else if ( p>v[mij] )
st=mij+1;
}
while ( st!=N-1 && v[st]==v[st+1] ) ++st;
if ( v[st]==p ) return st+1;
if ( v[st]!=p ) return -1;
}
int unu (int p)
{
st=0; dr=N-1;
while (st!=dr)
{
mij=(st+dr)/2;
if (p<=v[mij])
dr=mij;
else if (p>v[mij])
st=mij+1;
}
while (st!=N-1 && v[st]==v[st+1] && p==v[st]) st++;
if (v[st]==p) return st+1;
if (p<v[st] && p>v[st-1]) return st;
}
int doi (int p)
{
st=0; dr=N-1;
while (st!=dr)
{
mij=(st+dr)/2;
if (p<=v[mij])
dr=mij;
else if (p>v[mij])
st=mij+1;
}
return st+1;
}
int main()
{
in>>N;
for (i=0;i<N;i++) in>>v[i];
in>>M;
for (j=1;j<=M;j++)
{
in>>Z>>Q;
if (Z==0)
{
out<<zero(Q);
if (j!=M) out<<"\n";
}
if (Z==1)
{
out<<unu(Q);
if (j!=M) out<<"\n";
}
if (Z==2)
{
out<<doi(Q);
if (j!=M) out<<"\n";
}
}
return 0;
}