Pagini recente » Cod sursa (job #3158960) | Cod sursa (job #1468900) | Cod sursa (job #1477681) | Cod sursa (job #895215) | Cod sursa (job #1847587)
#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;
}