Pagini recente » Cod sursa (job #2278645) | Cod sursa (job #385785) | Cod sursa (job #2623213) | Cod sursa (job #409982) | Cod sursa (job #1836693)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int max1=-1,min1;
int i,j,x,y,t,r,n,k;
int* v;
void caut1(int s,int d,int x)
{
if(s<=d)
{
if(s==d)
{
if(max1<s && v[s]==x)
max1=s;
}
caut1(s,(s+d)/2,x);
caut1(((s+d)/2)+1,d,x);
}
}
void caut2(int s,int d,int x)
{
if(s<=d)
{
if(s==d)
{
if(s>max1 && v[s]<=x)
max1=s;
}
caut2(s,(s+d)/2,x);
caut2(((s+d)/2)+1,d,x);
}
}
void caut3(int s,int d,int x)
{
if(s<=d)
{
if(s==d)
{
if(s<min1 && v[s]>=x)
min1=s;
}
caut3(s,(s+d)/2,x);
caut3(((s+d)/2)+1,d,x);
}
}
int main()
{
f>>n;
v=new int[n+4];
for(i=1;i<=n;i++)
f>>v[i];
f>>k;
while(k!=0)
{
f>>y>>x;
max1=-1;
min1=n;
if(y==0)
{
caut1(1,n,x);
g<<max1<<endl;
}
else
if(y==1)
{
caut2(1,n,x);
g<<max1<<endl;
}
else
if(y==2)
{
caut3(1,n,x);
g<<min1<<endl;
}
k--;
}
}