#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ld = long double;

#define all(x)  x.begin(),x.end()
#define v(x) vector<x>
#define nl '\n'
#define fxd(x) fixed << setprecision(x)
template<class t> using ordered_set = tree<t, null_type, less<t>, rb_tree_tag, tree_order_statistics_node_update>;
template<class t> using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;


bool issorted(vector<ll>& arr)
{
    bool good = true;
    for (int i = 0; i < arr.size()-1; i++)
    {
        if(arr[i] > arr[i+1])
        {
            good = false;
            break;
        }
    }
    return good;
}

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int n; cin >> n;
    v(ll) arr(n);
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    if(issorted(arr))
    {
        cout << "yes"<< nl << 1 << " " << 1;
        return 0;
    }
    int l = -1 , r = -1;
    bool oneseg = true;
    for (int i = 1; i < n; i++)
    {
        if(arr[i] < arr[i-1])
        {
            if(oneseg)
            {
                if(l == -1)
                {
                    l = i;
                    r = i+1;
                }
                else
                {
                    r = i+1;
                }
            }
            else
            {
                cout << "no" ;
                return 0;
            }
        }
        else
        {
            if(r != -1)
            {
                oneseg = false;
            }
        }
    }
    //cout << l << " " << r;
    reverse(arr.begin()+l-1 , arr.begin()+r);

    if(issorted(arr))
    {
        cout << "yes"<< nl << l << " " << r;
    }
    else
    {
        cout << "no";
    }
}