Pagini recente » Cod sursa (job #276372) | Cod sursa (job #344176) | Cod sursa (job #2156616) | Cod sursa (job #963256) | Cod sursa (job #484143)
Cod sursa(job #484143)
#include <stdio.h>
using namespace std;
int v[100001];
int n, m, i, j, k;
int quest, nr;
int cautare0 (int x)
{
int st, dr, mijl;
st = 1;
dr = n;
while (st <= dr)
{
mijl = st + (dr - st) / 2;
if (v[mijl] == x && v[mijl+1] > x && v[mijl-1] <= x)
return mijl;
else if (v[mijl] == x && v[mijl+1] == x)
st = mijl;
else if (v[mijl] == x && mijl == n)
return mijl;
else if (v[mijl] < x)
st = mijl + 1;
else
dr = mijl - 1;
}
return -1;
}
int cautare1 (int x)
{
int st, dr, mijl;
st = 1;
dr = n;
while (st <= dr)
{
mijl = st + (dr - st) / 2;
if (v[mijl] <= x && v[mijl+1] > x)
return mijl;
else if (v[mijl] <= x && v[mijl-1] <= x)
st = mijl + 1;
else if (v[mijl] <= x && mijl == 1)
return mijl;
else if (v[mijl] < x)
st = mijl + 1;
else
dr = mijl - 1;
}
}
int cautare2 (int x)
{
int st, dr, mijl;
st = 1;
dr = n;
while (st <= dr)
{
mijl = st + (dr - st) / 2;
if (v[mijl] == x && v[mijl-1] < x && v[mijl+1] >= x)
return mijl;
else if (v[mijl] == x && v[mijl-1] <= x)
dr = mijl - 1;
else if (v[mijl] > x)
dr = mijl - 1;
else if (v[mijl] < x)
st = mijl + 1;
}
}
int main ()
{
FILE *f = fopen ("cautbin.in","r");
FILE *g = fopen ("cautbin.out","w");
fscanf (f,"%d", &n);
for (i=1; i<=n; ++i)
fscanf (f,"%d", &v[i]);
fscanf (f,"%d", &m);
for (k=1; k<=m; ++k)
{
fscanf (f,"%d %d", &quest, &nr);
if (quest == 0)
fprintf (g, "%d\n", cautare0 (nr));
else if (quest == 1)
fprintf (g, "%d\n", cautare1 (nr));
else
fprintf (g, "%d\n", cautare2 (nr));
}
fclose (g);
fclose (f);
return 0;
}