Pagini recente » Cod sursa (job #435514) | Cod sursa (job #183431) | Monitorul de evaluare | Istoria paginii runda/bcb/clasament | Cod sursa (job #203140)
Cod sursa(job #203140)
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define NMAX 5000
int n,a[NMAX+1];
int m[NMAX+1],M[NMAX+1],next[NMAX+1],l[NMAX+1];
int main(){
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
int i,j,lmin,lmax,first,ua,pua,max,min;
//char sir[NMAX*11],*p;
scanf("%d\n",&n);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
/*fgets(sir,NMAX*11,stdin);p=sir;
for(i=1;i<=n;++i){
a[i]=atoi(p);
while(*p!=32) ++p;
++p;
} */
min=INT_MAX;max=INT_MIN;
for(i=1;i<=n;++i){
if(a[i]<min) min=a[i];
if(a[i]>max) max=a[i];
}
if(min==max) {lmin=n;first=1;goto finish;}
if(min==a[n]) {lmin=1;first=n;goto finish;}
if(max==a[1]) {lmin=1;first=1;goto finish;}
int ales;
ales=0;
M[n]=1;
for(i=n-1;i;--i){
lmin=0;ua=a[i];pua=i;ales=0;
for(j=i+1;j<=n;++j)
if(a[i]<=a[j]){
if(!ales){
lmin=M[j];next[i]=j;
ua=a[j];pua=j;
ales=1;
}
else
if(ua>a[j])
if(lmin>M[j]){
lmin=M[j];next[i]=j;
ua=a[j];pua=j;
}
}
M[i]=lmin+1;
}
m[1]=1;
for(i=2;i<=n;++i){
lmin=0;ua=a[i];pua=i;ales=0;
for(j=i-1;j;--j)
if(a[j]<=a[i]){
if(!ales){
lmin=m[j];next[i]=j;
ua=a[j];pua=j;
ales=1;
}
else
if(ua<a[j])
if(lmin>m[j]){
lmin=m[j];next[i]=j;
ua=a[j];pua=j;
}
}
m[i]=lmin+1;
}
for(i=1;i<=n;++i) l[i]=m[i]+M[i]-1;
lmin=n;
for(i=1;i<=n;++i)
if(lmin>m[i]) {lmin=l[i];first=i;}
else if(lmin==l[i]&&a[first]>a[next[i]])
first=i;
finish:
printf("%d\n",lmin);
/*i=first;
while(next[i]){
printf("%d ",i);
i=next[i];
}
printf("%d",i); */
return 0;
}