Pagini recente » Cod sursa (job #513445) | Cod sursa (job #3354085) | Cod sursa (job #1294535) | Cod sursa (job #1294533) | Cod sursa (job #2004187)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
FILE *F = fopen("secv.in", "r"), *G = fopen("secv.out", "w");
int u, p, n, v[5001], w[5001], k;
bitset<5001> c;
bitset<5001> f;
stack<int> st;
int main()
{
fscanf(F, "%d ", &n);
for(int i = 1; i <= n; ++ i) fscanf(F, "%d ", &v[i]), w[i] = v[i];
sort(w+1, w+n+1);
int l, r, mij;
for(int i = 1; i <=n; ++ i)
{
l = 1; r = n;
while(l <= r)
{
mij = (l+r)>>1;
if(w[mij] >= v[i]) r = mij - 1;
else l = mij+1;
}
v[i] = l;
if(!f[v[i]]) f[v[i]] = 1, ++k;
}
st.push(v[n]); c[v[n]] = 1; u =n; p = n;
for(int i = n-1; i; i--)
{
if(v[i] < st.top() && !c[v[i]])
st.push(v[i]), c[v[i]] = 1, p = i;
else if(!c[v[i]])
{
while(!st.empty() && v[i] > st.top())
c[st.top()] = 0, st.pop();
if(st.empty()) u = i;
st.push(v[i]), c[v[i]] = 1, p = i;
}
}
if(st.size() != k) fprintf(G, "%d", -1);
else fprintf(G, "%d", u-p+1);
return 0;
}