Cod sursa(job #1847587)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 14 ianuarie 2017 19:18:07
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <set>
#include <queue>
#include <algorithm>
#include <climits>

using namespace std;
const int MAX_N = 5000;

int v[MAX_N + 5];

set <int> s;
queue <int> q;

bool f[MAX_N + 5];

int main () {
  freopen ("secv.in", "r", stdin);
  freopen ("secv.out", "w", stdout);
  
  int N;
  scanf ("%d", &N);
  for (int i = 1; i <= N; ++i) {
    scanf ("%d", &v[i]);
    s.insert (v[i]);
  }
  
  int my_max = 0;
  set<int> ::iterator it;
  set<int> ::iterator it2;
  for (int i = 1; i <= N; ++i) {
    {it=lower_bound (s.begin(), s.end(), v[i]);
    v[i]=*it;}
    my_max = max (my_max, v[i]);
    if (v[i] == 1)
      q.push (i);
  }
  for (int i = 1; i <= N; ++i)
    printf ("%d ", v[i]);
  printf ("\n");
  
  int my_min = -1;
  bool ok;
  while (!q.empty()) {
    int poz = q.front();
    q.pop();
    f[1] = true;
    f[0] = true;
    ok = true;
    int i;
    for (i = poz; i <= N && !f[my_max]; ++i) {
      f[v[i]] = true;
      if (!f[v[i] - 1]) {
        ok = false;
        break;
      }
    }
    if (ok == true) {
      my_min = min (my_min, i - poz + 1);
    }
    for (i = 1; i <= my_max; ++i)
      f[i] = false;
  }
  
  printf ("%d\n", my_max);
  return 0;
}