Pagini recente » Cod sursa (job #934383) | Cod sursa (job #1092917) | Cod sursa (job #430607) | Cod sursa (job #2195973) | Cod sursa (job #490321)
Cod sursa(job #490321)
#include "stdio.h"
using namespace std;
int n,v[100];
int cerinta1(int x)
{
int p,u,m,maxpoz(0),ok(0);
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(v[m]==x && m>maxpoz)
{
maxpoz=m;
p=m+1;
ok=1;
}
else
{
if(v[m]<x)
p=m+1;
else
u=m-1;
}
}
if(ok==0)
return 1;
else
return maxpoz;
}
int cerinta2(int x)
{
int p,u,m,maxpoz(0);
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(v[m]<=x && m>maxpoz)
{
maxpoz=m;
p=m+1;
}
else
{
if(v[m]<x)
p=m+1;
else
u=m-1;
}
}
return maxpoz;
}
int cerinta3(int x)
{
int p,u,m,minpoz(0x3f3f3f3f);
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(v[m]>=x && m<minpoz)
{
minpoz=m;
u=m-1;
}
else
{
if(v[m]<x)
p=m+1;
else
u=m-1;
}
}
return minpoz;
}
int main()
{
FILE* f=fopen("cautbin.in","r");
FILE* g=fopen("cautbin.out","w");
int x,caz,M,i;
fscanf(f,"%i",&n);
for(i=1;i<=n;i++)
fscanf(f,"%i",&v[i]);
fscanf(f,"%i",&M);
for(i=1;i<=M;i++)
{
fscanf(f,"%i %i",&caz,&x);
switch(caz)
{
case 0:
fprintf(g,"%i\n",cerinta1(x));
break;
case 1:
fprintf(g,"%i\n",cerinta2(x));
break;
case 2:
fprintf(g,"%i\n",cerinta3(x));
break;
}
}
return 0;
}