Cod sursa(job #797584)
#include <iostream>
#include <fstream>
using namespace std;
int n,a[100000],m,x,y,i;
int one(int lo,int hi,int y)
{int mid;
while(lo<hi)
{mid=lo+(hi-lo)/2;
if(a[mid]<=y)lo=mid+1;
else hi=mid-1;
}
mid=lo+(hi-lo)/2;
if(a[mid]>y)mid--;
if(a[mid]==y)return mid;
return -1;
}
int two(int lo,int hi,int y)
{
int mid;
while(lo<hi)
{mid=lo+(hi-lo)/2;
if(a[mid]<=y) lo=mid+1;
else hi=m-1;
}
mid=lo+(hi-lo)/2;
if(a[mid]>y)mid--;
return mid;
}
int thr(int lo,int hi,int y)
{
int mid;
/*while (lo < hi) {
mid = (lo + hi) / 2;
if (a[mid] < y)
lo = mid + 1;
else
hi = mid;
}
mid = (lo + hi) / 2;
if (a[m] < y)
++ mid;*/
while(lo<hi)
{
mid=lo+(hi-lo)/2;
if(a[mid]<y)lo=mid+1;
else hi=mid;
}
mid=lo+(hi-lo)/2;
if(a[mid]<y)mid++;
return mid;
}
int main()
{ ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
f>>m;
for(i=m;i>=1;i--)
{ x=0;y=0;
f>>x>>y;
int k;
if(x==0) k=one(1,n,y);
if(x==1) k=two(1,n,y);
if(x==2) k=thr(1,n,y);
g <<k<<"\n";
}
}