Pagini recente » Cod sursa (job #1683419) | Cod sursa (job #1349898) | Cod sursa (job #1724732) | Cod sursa (job #1263288) | Cod sursa (job #2495125)
#include <iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
#include<iomanip>
#define N 100005
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100005];
int cautare1(int x)//cea mai mare poz cu val x
{
int s=1,d=n,m,val=-1;
while(s<=d)
{
m=(s+d)/2;
if(x<a[m])d=m-1;
else
{
s=m+1;
if(a[m]==x)val=m; //am gasit o valoare
}
}
return val;
}
int cautare2(int x)//cea mai mare poz cu val<=x
{
int s=1,d=n,m;
if(a[d]<=x)return d;
while(s<d)
{
m=(s+d)/2;
if(a[m]<=x)s=m+1;//daca pot sa mai restrang intervalul
else d=m;
}
if(a[m]>x)return m-1;
return m;
}
int cautare3(int x)//cea mai mica poz cu val >=x
{
int s=1,d=n,m;
if(a[s]>=x)return s;
while(s<d)
{
m=(s+d)/2;
if(a[m]<x)s=m+1;
else d=m;
}
if(a[m]<x)return m+1;
return m;
}
void read()
{
int i,m,task,x;
fin>>n;
for(i=1;i<=n;++i)fin>>a[i];
fin>>m;
for(i=1;i<=m;++i)
{
fin>>task>>x;
if(task==0)fout<<cautare1(x)<<"\n";
if(task==1)fout<<cautare2(x)<<"\n";
if(task==2)fout<<cautare3(x)<<"\n";
}
}
int main()
{
read();
return 0;
}