Pagini recente » Cod sursa (job #2707513) | Cod sursa (job #3132079) | Cod sursa (job #2707525) | Cod sursa (job #691010) | Cod sursa (job #194617)
Cod sursa(job #194617)
#include<fstream>
using namespace std;
int a[100009],n;
ofstream g("cautbin.out");
int binser(int x,int &lop){
int i, pas;
for(pas=1;pas<n;pas<<=1);
for(i=0;pas;pas>>=1)
if(i+pas<n&&a[i+pas]<=x)
i+=pas;
lop=i;
if(a[i]!=x) return -1;
else return i;
}
int bs(int x){
int i, pas;
for(pas=1;pas<n;pas<<=1);
for(i=n-1;pas;pas>>=1)
if(i-pas>=0&&a[i-pas]>=x)
i-=pas;
return i;
}
void raspunde(int t, int x){
int k;
int r=binser(x,k);
switch(t){
case 0: if(r>0) g<<r+1<<'\n';
else g<<r<<'\n';break;
case 1: g<<k+1<<'\n';break;
case 2: g<<bs(x)+1<<'\n';break;
}
}
int main(){
int m, t, x,i;
ifstream f("cautbin.in");
f>>n;
for(i=0;i<n;i++)
f>>a[i];
f>>m;
for(i=0;i<m;i++){
f>>t;
f>>x;
raspunde(t,x);
}
g.close();
return 0;
}