Pagini recente » Cod sursa (job #1712007) | Cod sursa (job #2731697) | Cod sursa (job #1372817) | Cod sursa (job #2623512)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream out("cautbin.out");
int v[100001],x,y,n,m;
int caut(int s,int d,int x)
{
if(s>d)
return -1;
else
{
int m=(s+d)/2;
if(x==v[m] && v[m+1]!=x)
return m;
if(x < v[m])
return caut(s,m-1,x);
if(x> v[m] || v[m+1]==x)
return caut(m+1,d,x);
}
}
int caut12 (int s, int d, int x)
{
int m=0;
while (s <= d) {
m = (s + d) / 2;
if (v[m] <= x)
s = m + 1;
else
d = m - 1;
}
m = (s + d) / 2;
if (v[m] > x)
m --;
if (v[m] == x)
return m;
return -1;
}
int caut2(int s,int d,int x)
{
int m;
while(s<d)
{
m=(s+d)/2;
if(v[m]<=x)
s=m+1;
else d=m;
}
m=(s+d)/2;
if(v[m]>x)
m=m-1;
return m;
}
int caut3(int s,int d,int x)
{
int m;
while (s<d)
{
m=(s+d)/2;
if(v[m]<x)
s=m+1;
else d=m;
}
m=(s+d)/2;
if(v[m]<x)
m=m+1;
return m;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
f>>m;
for(int i=1;i<=m;i++)
{
f>>y>>x;
if(y==1)
{
out<<caut2(1,n,x);
}
if(y==2)
{
out<<caut3(1,n,x);
}
if(y==0)
{
out<<caut12(1,n,x);
}
}
return 0;
}