题意:找出一段逆序!
预存a[]数组到b[]数组。将b排序,然后前后找不同找到区间[l,r],然后推断[l,r]是否逆序就能够了!。当然还得特判本身就是顺序的!!
!
AC代码例如以下:
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int a[100005],b[100005]; int main() { int n; int i; while(cin>>n) { memset(a,0,sizeof a); memset(b,0,sizeof b); for(i=0;i<n;i++) {cin>>a[i]; b[i]=a[i];} sort(b,b+n); int flag1=1; for(i=0;i<n;i++) { if(a[i]!=b[i]) {flag1=0;break;} } if(flag1) { cout<<"yes"<<endl<<"1"<<" "<<"1"<<endl; continue; } int flag=0; int l=0,r=n-1; for(i=0;i<n;i++) { if(a[i]!=b[i]) { l=i; break; } } for(i=n-1;i>=0;i--) { if(a[i]!=b[i]) { r=i; break; } } for(i=l+1;i<=r;i++) { if(a[i]>a[i-1]) {flag=1;break;} } if(flag) cout<<"no"<<endl; else cout<<"yes"<<endl<<l+1<<" "<<r+1<<endl; } return 0; }