Pagini recente » Cod sursa (job #1607986) | Cod sursa (job #716988) | Cod sursa (job #3218348) | Cod sursa (job #2397992) | Cod sursa (job #766160)
Cod sursa(job #766160)
#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-1;
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()-1;
while (i<j-1)
{
int middle = i+(j-i)/2;
if (a[middle]<=x)
i=middle;
else
j=middle-1;
}
return i;
}
int bsearchsmaller(int x,vector<int> &a)
{
int i = 0;
int j = a.size()-1;
while (i<j-1)
{
int middle = i+(j-i)/2;
if (a[middle]<x)
i=middle;
else
j=middle-1;
}
return j;
}
int main()
{
FILE *f=fopen("cautbin.in","r");
FILE *g=fopen("cautbin.out","w+");
int n;
fscanf(f,"%d",&n);
vector<int> a(n);
for (int i=0;i<n;i++)
{
fscanf(f,"%d",&a[i]);
}
int t;
fscanf(f,"%d",&t);
for (int i=0;i<t;i++)
{
int res =0;
int x,type;
fscanf(f,"%d %d",&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;
}
fprintf(g,"%d\n",res+1);
}
fclose(g);
fclose(f);
return 0;
}