Pagini recente » Cod sursa (job #193898) | Cod sursa (job #2491009) | Cod sursa (job #222752) | Cod sursa (job #1081470) | Cod sursa (job #1791414)
#include <vector>
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
vector <int> a;
int n,lp,rp,C;
void read()
{
int q;
cin >> n;
a.push_back(-1);
for (int i=0; i<n; i++)
{
cin >> q;
a.push_back(q);
}
}
int zero(int l, int r)
{
if (a[l]==C && a[l+1]>C) return l;
if (a[r]==C && a[r+1]>C) return r;
if (lp==l && rp==r) return -1;
int y=(l+r)/2;
lp=l; rp=r;
if (a[y]>C) return zero(l,y); else return zero(y,r);
}
int unu(int l, int r)
{
if (a[l]<=C && a[l+1]>C) return l;
if (a[r]<=C && a[r+1]>C) return r;
if (lp==l && rp==r) return -1;
int y=(l+r)/2;
lp=l; rp=r;
if (a[y]>C) return unu(l,y); else return unu(y,r);
}
int doi(int l, int r)
{
if (a[l]>=C && a[l-1]<C) return l;
if (a[r]>=C && a[r-1]<C) return r;
if (lp==l && rp==r) return -1;
int y=(l+r)/2;
lp=l; rp=r;
if (a[y]>=C) return doi(l,y); else return doi(y,r);
}
void solve()
{
int x,m;
cin >> m;
for ( ; m ; m--)
{
lp=-1,rp=-1;
cin >> x >> C;
if (x==0) cout << zero(1,n);
if (x==1) cout << unu(1,n);
if (x==2) cout << doi(1,n);
cout << '\n';
}
}
main()
{
read();
solve();
}