Pagini recente » Cod sursa (job #69699) | Cod sursa (job #823375) | Cod sursa (job #441319) | Cod sursa (job #2677778) | Cod sursa (job #1767176)
#include<bits/stdc++.h>
#define NMax 100100
using namespace std;
ofstream out("cautbin.out");
//array
int v[NMax];
//variables
int n,m,x,y;
//Function
int first();
int sec();
int third();
int midd(int x, int y);
int main()
{
ifstream in("cautbin.in");
in>>n;
for(int i = 1; i<=n; i++)
in>>v[i];
in>>m;
for(int i = 1; i<=m; i++)
{
in>>x>>y;
if(x == 0)
out<< first() << "\n";
if(x == 1)
out<< sec() <<"\n";
if(x == 2)
out<< third() <<"\n";
}
}
int first()
{
int l, r, midd;
l = 1; r = n;
while( l < r )
{
midd = (l + r) / 2;
if(v[midd] <= y)
l = midd + 1;
else
r = midd - 1;
}
if(v[midd] > y )
midd = midd - 1;
if(v[midd] == y) return midd;
return -1;
}
int cMidd(int x, int y){
return (x+y)/2;
}
int sec()
{
int l = 1, r = n, midd;
while(l < r)
{
midd = cMidd(l, r);
if(v[midd] < y)
l = midd + 1;
else
r = midd;
}
midd = cMidd(l, r);
if(v[midd] > y) midd --;
return midd;
}
int third()
{
int l = 1, r = n, midd;
while(l < r)
{
midd = cMidd(l, r);
if(v[midd] < y)
l = midd + 1;
else
r = midd - 1;
}
midd = cMidd(l, r);
if(v[midd] < y && midd < n)
midd++;
if(v[midd] < y)
--midd;
return midd;
}