Pagini recente » Cod sursa (job #1812308) | Cod sursa (job #1905594) | Cod sursa (job #916100) | Cod sursa (job #1779462) | Cod sursa (job #1021999)
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include<cstdio>
#include<cstring>
#include<fstream>
using namespace std;
#define NMax 200001
#define MMax 10000
int v[NMax], poz, caz;
int caut0 (int li, int ls, int x)
{
int m = (li + ls) / 2;
if (v[m] == x)
{
return m;
}
else
{
if (li <= ls)
{
if ( x < v[m] )
{
caut0(li, m-1, x);
}
else
caut0(m+1, ls, x);
}
else
{
if ( caz == 0 )
return -1;
if ( caz == 1 )
return ls;
if ( caz == 2 )
return li;
}
}
}
int main()
{
int n, m;
FILE *f = fopen("cautbin.in", "r");
FILE *g = fopen("cautbin.out", "w");
fscanf(f, "%d", &n);
for (int i = 1; i <= n; i++)
fscanf(f, "%d", &v[i]);
fscanf(f, "%d", &m);
int val;
for (int i = 0; i < m; i++)
{
fscanf(f, "%d %d", &caz, &val);
poz = 0;
if (caz == 0)
{
int poz = caut0 (1, n, val);
if (poz == -1)
fprintf(g, "%d\n", poz);
else
{
while (v[poz+1] == val && poz+1 <= n)
poz++;
fprintf(g, "%d\n", poz);
}
}
else
if (caz == 1)
{
int poz = caut0 (1, n, val);
while (v[poz+1] == val && poz+1 <= n)
poz++;
fprintf(g, "%d\n", poz);
}
else
if (caz == 2)
{
int poz = caut0 (1, n, val);
while ( v[poz-1] == val && poz-1 >= 1)
poz--;
fprintf(g, "%d\n", poz);
}
}
fclose(f);
fclose(g);
return 0;
}