Pagini recente » Cod sursa (job #2871954) | Cod sursa (job #187135) | Cod sursa (job #3265420) | Cod sursa (job #79337) | Cod sursa (job #920103)
Cod sursa(job #920103)
#include<fstream>
#define NMAX 100005
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
long N,v[NMAX],M,t,x;
long caut3(long val , long l, long r)
{
if(l>r)
{
long aux=v[l];
while (v[l]==aux) l--;
return l+1;
}
long m=(l+r)/2;
if (val==v[m])
{while (val==v[m]) m--;
return m+1;}
if (val>v[m]) return caut3 (val,m+1,r);
if (val<v[m]) return caut3 (val,l,m-1);
}
long caut2(long val , long l, long r)
{
if(l>r)
{
long aux=v[r];
while (v[r]==aux) r++;
return r-1;
}
long m=(l+r)/2;
if (val==v[m])
{while (val==v[m]) m++;
return m-1;}
if (val<v[m]) return caut2 (val,l,m-1);
if (val>v[m]) return caut2 (val,m+1,r);
}
long caut1(long val , long l, long r)
{
if(l>r)
return -1;
long m=(l+r)/2;
if (val==v[m])
{while (val==v[m]) m++;
return m-1;}
if (val<v[m]) return caut1 (val,l,m-1);
if (val>v[m]) return caut1 (val,m+1,r);
}
int main()
{
f>>N;
for (long i=1;i<=N;i++)
f>>v[i];
f>>M;
for (long i=1;i<=M;i++)
{
f>>t>>x;
if (t==0)
g<<caut1(x,1,N)<<'\n';
if (t==1)
g<<caut2(x,1,N)<<'\n';
if (t==2)
g<<caut3(x,1,N)<<'\n';
}
return 0;
}