Pagini recente » Cod sursa (job #1839871) | Cod sursa (job #2344977) | Cod sursa (job #694527) | Cod sursa (job #1635542) | Cod sursa (job #766156)
Cod sursa(job #766156)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int bsearch(int x,vector<int> &a)
{
int i = 0;
int j = a.size();
while (i<j-1)
{
int middle = i+(j-i)/2;
if (a[middle]>x)
j=middle;
else
i=middle;
}
if (a[i]==x)
return i;
else return -2;
}
int bsearchgreater(int x,vector<int> &a)
{
int i = 0;
int j = a.size();
while (i<j-1)
{
int middle = i+(j-i)/2;
if (a[middle]<=x)
i=middle;
else
j=middle;
}
return i;
}
int bsearchsmaller(int x,vector<int> &a)
{
int i = 0;
int j = a.size();
while (i<j-1)
{
int middle = i+(j-i)/2;
if (a[middle]<x)
i=middle;
else
j=middle;
}
return j;
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n;
f>>n;
vector<int> a(n);
for (int i=0;i<n;i++)
{
f>>a[i];
}
int t;
f>>t;
for (int i=0;i<t;i++)
{
int res =0;
int x,type;
f>>type>>x;
switch (type){
case 0:res = bsearch(x,a);break;
case 1:res = bsearchgreater(x,a);break;
case 2:res = bsearchsmaller(x,a);break;
default:break;
}
g<<res+1<<endl;
}
g.close();
f.close();
return 0;
}