1 solutions
-
0
C :
#include<stdio.h> int main() { int i,j,k,n,x[101],y[101],t,temp; while(scanf("%d",&n)==1) { t=0; for(i=0;i<n;i++) scanf("%d",&x[i]); for(i=0;i<n;i++) { temp=0; for(j=0;j<101;j++) y[j]=240; y[0]=y[n]=-1; for(j=0;j<i;j++) { k=0; while(x[j]>y[k]) { if(x[j]>y[k]&&x[j]<y[k+1])y[k+1]=x[j]; k++; } } for(j=i;j>0;j--)if(x[i]>y[j]){temp=j;break;} for(j=n-1;j>i;j--) { k=n; while(x[j]>y[k]) { if(x[j]>y[k]&&x[j]<y[k-1])y[k-1]=x[j]; k--; } } for(j=i+1;j<n;j++)if(x[i]>y[j]){temp+=n-j;break;} if(t<temp)t=temp; } printf("%d\n",n-t-1); } return 0; }C++ :
#include <stdio.h> #include <string.h> int i,j; int n; int left[102], right[102]; int arr[250]; void init_left() { for (i = 0; i < n; ++ i) { int max = 1; for (j = 0; j < i; ++ j) { if (arr[i] > arr[j]) max = max > left[j] + 1 ? max : left[j] + 1; } left[i] = max; } } void init_right() { for (i = n - 1; i >= 0; -- i) { int max = 1; for (j = i + 1; j < n; ++ j) { if (arr[i] > arr[j]) { if(max<=right[j]+1) { max=right[j]+1; } } // max = max > right[j] + 1 ? max : right[j] + 1; } right[i] = max; } } int init() { if (scanf("%d", &n) == EOF) return 0; for (i = 0; i < n; ++ i) scanf("%d", &arr[i]); return 1; } int solve() { int i,temp; init_left(); init_right(); int min = n; for (i = 0; i < n; ++ i) { temp = n - (left[i] + right[i] - 1); if(min>=temp) { min=temp; } //min = min < temp ? min : temp; } return min; } int main() { // freopen("ininin.txt","r",stdin); // freopen("out.out","w",stdout); while (init()!=0) { printf("%d\n", solve()); } return 0; }
- 1
Information
- ID
- 18382
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By