Pagini recente » Cod sursa (job #2321358) | Cod sursa (job #122982) | Cod sursa (job #1073833) | Cod sursa (job #2835921) | Cod sursa (job #1947504)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,v[100001];
int caut(int st,int dr,int y)
{
int mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<=y) st=mij+1;
else dr=mij-1;
mij=(st+dr)/2;
}
if(v[mij]>y) mij--;
if(v[mij]==y) return mij;
return -1;
}
int cautmin(int st,int dr,int y)
{
int mij;
while(st<dr)
{
mij=(st+dr)/2;
if(v[mij]<=y) st=mij+1;
else dr=mij;
}
mij=(st+dr)/2;
if (v[mij] > y)
-- mij;
return mij;
}
int cautmax(int st,int dr,int y)
{
int mij;
while(st<dr)
{
mij=(st+dr)/2;
if(v[mij]>y) st=mij+1;
else dr=mij+1;
}
mij=(st+dr)/2;
if (v[mij] < y)
++ mij;
return mij;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
int o;
fin>>o;
for(int i=1;i<=o;i++)
{
int x,y;
fin>>x>>y;
if(x==0)
fout<<caut(1,n,y)<<'\n';
if(x==1)
fout<<cautmax(1,n,y)<<'\n';
if(x==2)
fout<<cautmin(1,n,y)<<'\n';
}
return 0;
}