Pagini recente » Cod sursa (job #2382426) | Cod sursa (job #1412379) | Cod sursa (job #2342638) | Cod sursa (job #2598837) | Cod sursa (job #617505)
Cod sursa(job #617505)
#include<stdio.h>
int n, m, x[100000];
int cauta0(int b)
{
int ps, pi, mij, poz=-1;
ps=1; pi=n;
while(ps<=pi)
{
mij=(ps+pi)/2;
if(b<x[mij])
pi=mij-1;
if(b>x[mij])
ps=mij+1;
if(b==x[mij])
poz=mij, ps=n+1;
}
while(x[poz+1]==b&&poz<=n)
poz++;
return poz;
}
int cauta1(int b)
{
int ps, pi, mij, poz;
ps=1; pi=n;
while(ps<=pi)
{
mij=(ps+pi)/2;
if(b<=x[mij])
pi=mij-1, poz=mij;
if(b>=x[mij])
ps=mij+1, poz=mij;
}
while(x[poz+1]<=b&&poz<=n)
poz++;
return poz;
}
int cauta2(int b)
{
int ps, pi, mij, poz;
ps=1; pi=n;
while(ps<=pi)
{
mij=(ps+pi)/2;
if(b<=x[mij])
pi=mij-1, poz=mij;
if(b>=x[mij])
ps=mij+1, poz=mij;
}
while(x[poz-1]==b&&poz<=n)
poz--;
return poz;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
int i, a, b;
for(i=1;i<=n;i++)
scanf("%d", &x[i]);
scanf("%d", &m);
for(i=1;i<=m;i++)
{
scanf("%d %d", &a, &b);
if(a==0)
printf("%d\n", cauta0(b));
if(a==1)
printf("%d\n", cauta1(b));
if(a==2)
printf("%d\n", cauta2(b));
}
return 0;
}