Codeforces Round #258 (Div. 2), problem: (B) Sort the Array
//http://codeforces.com/contest/451/problem/B
题意:给一个数组,问是否可以通过倒转连续的一个子序列使得这个数列变成单挑递增数列,数列里的元素唯一。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
#define INF (1<<25)
#define maxd 1e9+7
map<string ,int>city;
vector<vii>neighbors;
vector<int>vals;
int main()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
if (n == 1) {
puts("yes");
printf("1 1\n");
return 0;
}
int l=0;while(l+1<n&&a[l]<a[l+1])
{
++l;
}
int r=l+1;
while(r<n&&a[r]<a[r-1])
{
++r;
}
reverse(a.begin()+l,a.begin()+r);
for(int i=1;i<n;++i)
{
if(a[i]<a[i-1]){
puts("no");
return 0;
}
}
puts("yes");
cout<<l+1<< " "<<r<<endl;
}