Pagini recente » Cod sursa (job #2204726) | Cod sursa (job #1509237) | Cod sursa (job #982975) | Cod sursa (job #2731893) | Cod sursa (job #1523417)
#include <stdio.h>
#include <stdlib.h>
int *x;
int n;
int m;
int cautare_binara(int p, int u, int val)
{
int m;
while(p<=u)
{
m=p+(u-p)/2;
if(x[m]==val)
return m;
if (x[m]<val)
p=m+1;
if (x[m]>val)
u=m-1;
}
return -1;
}
int mod_1(int p, int u, int val)
{
int m;
while(p<=u)
{
m=p+(u-p)/2;
if (x[m]<=val)
p=m+1;
if (x[m]>val)
u=m-1;
}
return m-1;
}
int mod_2(int p, int u, int val)
{
int m;
while(p<=u)
{
m=p+(u-p)/2;
if(x[m]==val)
u=m-1;
else
{
if (x[m]<val)
p=m+1;
if(x[m]>val)
u=m-1;
}
}
return m;
}
int main()
{
FILE *f=fopen("cautbin.in","r");
FILE *g=fopen("cautbin.out","w");
int i,op,v,c;
fscanf(f,"%d",&n);
x=(int*)malloc((n+1)*sizeof(int));
for (i=1;i<=n;i++)
fscanf(f,"%d",&x[i]);
fscanf(f,"%d",&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d",&op,&v);
switch(op)
{
case 0:
{
c=cautare_binara(1,n,v);
if (c!=-1)
while(x[c+1]==v)
c++;
fprintf(g,"%d\n",c);
break;
}
case 1:
{
c=mod_1(1,n,v);
while (x[c+1]==v)
c++;
fprintf(g,"%d\n",c);
break;
}
case 2:
{
c=mod_2(1,n,v);
fprintf(g,"%d\n",c);
break;
}
}
}
return 0;
}