Pagini recente » Cod sursa (job #2175974) | Cod sursa (job #289908) | Cod sursa (job #2237508) | Cod sursa (job #2260236) | Cod sursa (job #1225762)
#include <fstream>
#include <algorithm>
#define NMax 5005
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n, v[NMax], i, stack[NMax], p[NMax], st, dr, mij, lmax, ind, k, recons[NMax], j, ok, so[NMax];
int main()
{
f>>n;
for (i=1; i<=n; i++)
f>>v[i];
for (i=1; i<=n; i++) {
st=1;
dr=lmax;
while (st<=dr) {
mij=(st+dr)/2;
if (stack[mij] < v[i])
st=mij+1;
else {
dr=mij-1;
ind=mij;
}
}
if (v[i]>stack[lmax]) {
stack[++lmax]=v[i];
p[++k]=lmax;
}
else {
stack[ind]=v[i];
p[++k]=ind;
}
}
ok=1;
int cop=lmax;
for (i=n; i>=1; i--) {
if (p[i]==cop) {
recons[cop]=v[i];
if (ok==1) {
dr=i;
ok=0;
}
st=i;
cop--;
}
}
sort(v+1, v+n+1);
so[1]=v[1];
j=1;
for (i=2; i<=n; i++)
if (v[i]!=so[j])
so[++j]=v[i];
ok=1;
if (j!=lmax)
ok=0;
else
for (i=1; i<=lmax; i++)
if (so[i]!=recons[i])
ok=0;
if (ok==1)
g<<dr-st+1;
else
g<<-1;
return 0;
}