Pagini recente » Cod sursa (job #1649446) | Cod sursa (job #1342298) | Cod sursa (job #436638) | Cod sursa (job #1552689) | Cod sursa (job #1021914)
#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 100001
#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(li, m-1, x);
}
else
{
if ( caz == 0 )
return -1;
if ( caz == 1 )
return li;
if ( caz == 2 )
return ls;
}
}
}
int main()
{
int n, m;
FILE *f = fopen("cautbin.in", "r");
FILE *g = fopen("cautbin.out", "w");
fscanf(f, "%d", &n);
for (int i = 0; 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 (0, n-1, val);
while (v[poz+1] == val && poz+1 < n)
poz++;
fprintf(g, "%d\n", poz+1);
}
else
if (caz == 1)
{
int poz = caut0 (0, n-1, val);
while (v[poz+1] <= val && poz+1 < n)
poz++;
fprintf(g, "%d\n", poz+1);
}
else
if (caz == 2)
{
int poz = caut0 (0, n-1, val);
while ( v[poz-1] >= val && poz-1 >= 0)
poz--;
fprintf(g, "%d\n", poz+1);
}
}
fclose(f);
fclose(g);
return 0;
}