Cod sursa(job #472141)

Utilizator marius.pungaruMarius Pungaru marius.pungaru Data 23 iulie 2010 00:40:51
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <algorithm>
#include <cstdio>
#include <vector>

using namespace std;

#define FIN "cautbin.in"
#define FOUT "cautbin.out"

int main(void) {
  int n, tests;
  vector<int> elements;

  freopen(FIN, "r", stdin);
  freopen(FOUT, "w", stdout);

  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    int element;
    scanf("%d", &element);
    elements.push_back(element);
  }

  scanf("%d", &tests);
  while (tests--) {
    int code, value;
    vector<int>::iterator pos;

    scanf("%d%d", &code, &value);
    switch (code) {
      case 0:
        pos = upper_bound(elements.begin(), elements.end(), value) - 1;
        printf("%d\n", (*pos == value) ? (pos - elements.begin()) + 1 : -1);
        break;

      case 1:
        pos = upper_bound(elements.begin(), elements.end(), value) - 1;
        printf("%d\n", (pos - elements.begin()) + 1);
        break;

      case 2:
        pos = lower_bound(elements.begin(), elements.end(), value);
        printf("%d\n", (pos - elements.begin()) + 1);
        break;
    }
  }

  return 0;
}