Pagini recente » Cod sursa (job #556223) | Cod sursa (job #1847239) | Cod sursa (job #2974252) | Cod sursa (job #1314305) | Cod sursa (job #1338784)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100];
int caut1(int st,int dr,int x)
{
int m,a;
m=(st+dr)/2;
if(st==dr)return -1;
if(v[m]==x)a=m;
else if(v[m]>x)a=caut1(st,m,x);
else if(v[m]<x)a=caut1(m+1,dr,x);
while(v[a+1]==x)a++;
return a;
}
int caut2(int st,int dr,int x)
{
int m,a;
m=(st+dr)/2;
if(st==dr)return -1;
if(v[m]<=x)a=m;
else if(v[m]>x)a=caut2(st,m,x);
else if(v[m]<x)a=caut2(m+1,dr,x);
while(v[a+1]<=x&&a+1<=dr)a++;
return a;
}
int caut3(int st,int dr,int x)
{
int m,a;
m=(st+dr)/2;
//if(st==dr)return -1;
if(v[m]>=x)a=m;
else if(v[m]>x)a=caut3(st,m,x);
else if(v[m]<x)a=caut3(m+1,dr,x);
while(v[a-1]>=x&&v[a-1]>=st)a--;
return a;
}
int main()
{
int n,k,i,nr,opt;
f>>n;
for(i=1;i<=n;i++)f>>v[i];
f>>nr;
for(i=1;i<=nr;i++)
{
f>>opt>>k;
if(opt==0)g<<caut1(1,n,k)<<endl;
else if(opt==1)g<<caut2(1,n,k)<<endl;
else if(opt==2)g<<caut3(1,n,k)<<endl;
}
return 0;
}