首页 > 代码库 > Sort the Array

Sort the Array

 1 /* 2    思路:  3    找到单调下降串的起始位置[l, r] 4    如果左边 0...l-1中的最大值 > l...r中的最小值 或者 5    r+1...n中的最小值 < l...r中的最大值 都是不能实现排序的!  6 */ 7 #include<iostream> 8 #include<cstdio> 9 #include<algorithm>10 using namespace std;11 typedef long long LL;12 int cur, nt;13 int cnt;14 int num[100005];15 int main(){16    int i, n;17    int begin, end;18    int flag;19    int min1, max2;20    while(scanf("%d", &n)!=EOF){21           cnt=cur=0;22        flag=0;23        for(i=1; i<=n; ++i){24           scanf("%d", &nt);25           num[i]=nt;26           if(nt>cur)27              flag=0;28           if(!flag && nt<cur){29              ++cnt;30              flag=1;31              begin=i-1;32              end=i;33           }34           if(flag && nt<cur)35                end=i;36           cur=nt;37        }38       if(cnt==1){39            min1=0x3f3f3f3f;40            if(end!=n)41                min1=num[end+1];42          max2=-0x3f3f3f3f;43          if(begin!=1)44              max2=num[begin-1];45          if(max2>num[end] || min1<num[begin]) 46             printf("no\n");47          else48             printf("yes\n%d %d\n", begin, end);49       }50       else if(cnt==0)51          printf("yes\n1 1\n");52       else printf("no\n");53    }54    return  0;55 }