Pagini recente » Cod sursa (job #2370169) | Cod sursa (job #1790083) | Cod sursa (job #2859397) | Cod sursa (job #2895071) | Cod sursa (job #975078)
Cod sursa(job #975078)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
const long LEN = 100001;
unsigned long a[LEN];
long long maxim;
void cautbin1(long y, int s, int d)
{
if(s<d)
{
long mid = s + (d-s)/2;
if(a[mid] == y && mid > maxim)
maxim = mid;
cautbin1(y, s, mid);
cautbin1(y, mid+1, d);
}
}
void cautbin2(long y, int s, int d)
{
if(s<d)
{
long mid = s + (d-s)/2;
if(a[mid] <= y && mid > maxim)
maxim = mid;
cautbin2(y, s, mid);
cautbin2(y, mid+1, d);
}
}
void cautbin3(long y, int s, int d)
{
if(s<d)
{
long mid = s + (d-s)/2;
if(a[mid] >= y && mid < maxim)
maxim = mid;
cautbin3(y, s, mid);
cautbin3(y, mid+1, d);
}
}
int compare (const void * a, const void * b)
{
return ( *(unsigned long*)a - *(unsigned long*)b );
}
int main()
{
int i;
long n,m,x,y;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
a[0]=0;
for(i=0;i<n;i++)
{
f>>a[i];
}
qsort(a, n, sizeof(unsigned long), compare );
f>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
//cout<<x<<y<<endl;
if(x==0)
{
maxim = -1;
//cout<<maxim;
cautbin1(y, 0, n-1);
g<<maxim+1<<endl;
}
else if(x==1)
{
maxim = -1;
cautbin2(y,0, n-1);
g<<maxim+1<<endl;
}
else if(x==2)
{
maxim = 32000;
cautbin3(y, 0, n-1);
g<<maxim+1<<endl;
}
}
}