#include <vector>
#include <sstream>
#include <algorithm>
#include <fstream>
#include <list>
#include <map>
#include <istream>
#include <bitset>
#include <sstream>
#include <unordered_map>
#include <stack>
#include <set>
#include <cmath>
#include <random>
#include <iostream>
#include <bitset>
#include <iomanip>
#include <queue>
#include <string>

#define int long long
#define endl "\n"
#define all(x) x.begin(),x.end()
#define rr return 0
#define xx first
#define yy second
#define pii pair<int,int>

using namespace std;

typedef long long ll;
typedef long double ld;


signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0;i < n;i++){
        cin >> a[i];
    }
    for(int i = 1;i < n;i++){
        if(a[i] < a[i - 1]){
            if((a[i - 1] - a[i]) == 1){
                a[i]++;
            }else{
                cout << "No";
                rr;
            }
        }
    }
    cout << "Yes";
    rr;
}

/*
 
 
 #include <vector>
 #include <sstream>
 #include <algorithm>
 #include <fstream>
 #include <list>
 #include <map>
 #include <istream>
 #include <bitset>
 #include <sstream>
 #include <unordered_map>
 #include <stack>
 #include <set>
 #include <cmath>
 #include <random>
 #include <iostream>
 #include <bitset>
 #include <iomanip>
 #include <queue>
 #include <string>
 
 #define endl "\n"
 #define all(x) x.begin(),x.end()
 #define rr return 0
 #define xx first
 #define yy second
 #define pii pair<int,int>
 
 using namespace std;
 
 typedef long long ll;
 typedef long double ld;
 
 bool cmp(pii a, pii b){
 return (a.xx + a.yy) < (b.xx + b.yy);
 }
 
 signed main(){
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 int n, m;
 cin >> n >> m;
 vector<string> a(n);
 vector<pii> b;
 for(int i = 0;i < n;i++){
 cin >> a[i];
 for(int j = 0;j < m;j++){
 if(a[i][j] == 'X'){
 b.push_back({i, j});
 }
 }
 }
 sort(all(b), cmp);
 int x, y;
 x = y = 0;
 for(int i = 0;i < b.size();i++){
 if(b[i].xx >= x){
 for(int j = x;j < b[i].xx;j++){
 cout << "D";
 }
 }else{
 for(int j = b[i].xx;j < x;j++){
 cout << "U";
 }
 }
 if(b[i].yy >= y){
 for(int j = y;j < b[i].yy;j++){
 cout << "R";
 }
 }else{
 for(int j = b[i].yy;j < y;j++){
 cout << "L";
 }
 }
 x = b[i].xx;
 y = b[i].yy;
 }
 rr;
 }

 
 
 #include <vector>
 #include <sstream>
 #include <algorithm>
 #include <fstream>
 #include <list>
 #include <map>
 #include <istream>
 #include <bitset>
 #include <sstream>
 #include <unordered_map>
 #include <stack>
 #include <set>
 #include <cmath>
 #include <random>
 #include <iostream>
 #include <bitset>
 #include <iomanip>
 #include <queue>
 #include <string>
 
 #define int long long
 #define endl "\n"
 #define all(x) x.begin(),x.end()
 #define rr return 0
 #define xx first
 #define yy second
 #define pii pair<int,int>
 
 using namespace std;
 
 typedef long long ll;
 typedef long double ld;
 
 vector<pii> v;
 vector<pii> h;
 map<pii, vector<pii>> g;
 map<int, int> vh;
 map<int, int> hh;
 map<pii, int> used;
 int a, b, c, d;
 int ans;
 int p1, p2;
 
 void dfs(int x, int y, int dist = 0){
 if(x == p1 && y == p2){
 ans = min(ans, dist);
 }
 used[{x, y}] = 1;
 for(auto i : g[{x, y}]){
 if(used[{i.xx, i.yy}] != 1){
 dfs(i.xx, i.yy, dist + abs(v[i.xx].xx - v[x].xx) + abs(h[i.yy].xx - h[y].xx));
 }
 }
 }
 
 
 signed main(){
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 int V, H, q;
 cin >> V >> H >> q;
 v.resize(V);
 h.resize(H);
 for(int i = 0; i < V;i++){
 cin >> v[i].xx >> v[i].yy;
 vh[v[i].xx] = i;
 }
 for(int i = 0; i < H;i++){
 cin >> h[i].xx >> h[i].yy;
 hh[h[i].xx] = i;
 }
 for(int i = 0;i < V;i++){
 for(int j = 0;j < H;j++){
 if(i > 0){
 if(h[j].yy == -1){
 g[{i, j}].push_back({i - 1, j});
 }
 }
 if(j > 0){
 if(v[i].yy == -1){
 g[{i, j}].push_back({i, j - 1});
 }
 }
 if(i < V - 1){
 if(h[j].yy == 1){
 g[{i, j}].push_back({i + 1, j});
 }
 }
 if(j < H - 1){
 if(v[i].yy == 1){
 g[{i, j}].push_back({i, j + 1});
 }
 }
 }
 }
 while(q--){
 cin >> a >> b >> c >> d;
 int x, y;
 x = vh[a];
 y = hh[b];
 p1 = vh[c];
 p2 = hh[d];
 ans = 1e18;
 used.clear();
 dfs(x, y);
 if(ans == 1e18){
 cout << -1 << endl;
 }else{
 cout << ans << endl;
 }
 }
 rr;
 }
 
 
 
 
 #include <vector>
 #include <sstream>
 #include <algorithm>
 #include <fstream>
 #include <list>
 #include <map>
 #include <istream>
 #include <bitset>
 #include <sstream>
 #include <unordered_map>
 #include <stack>
 #include <set>
 #include <cmath>
 #include <random>
 #include <iostream>
 #include <bitset>
 #include <iomanip>
 #include <queue>
 #include <string>
 
 #define endl "\n"
 #define all(x) x.begin(),x.end()
 #define rr return 0
 #define xx first
 #define yy second
 #define pii pair<int,int>
 
 using namespace std;
 
 typedef long long ll;
 typedef long double ld;
 
 bool cmp(pii a, pii b){
 return (a.xx + a.yy) < (b.xx + b.yy);
 }
 
 signed main(){
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 int n, m;
 cin >> n >> m;
 vector<string> a(n);
 vector<pii> b;
 for(int i = 0;i < n;i++){
 cin >> a[i];
 for(int j = 0;j < m;j++){
 if(a[i][j] == 'X'){
 b.push_back({i, j});
 }
 }
 }
 sort(all(b), cmp);
 int x, y;
 x = y = 0;
 for(int i = 0;i < b.size();i++){
 if(b[i].xx >= x){
 for(int j = x;j < b[i].xx;j++){
 cout << "D";
 }
 }else{
 for(int j = b[i].xx;j < x;j++){
 cout << "U";
 }
 }
 if(b[i].yy >= y){
 for(int j = y;j < b[i].yy;j++){
 cout << "R";
 }
 }else{
 for(int j = b[i].yy;j < y;j++){
 cout << "L";
 }
 }
 x = b[i].xx;
 y = b[i].yy;
 }
 rr;
 }
 
 
 */




Measured memory_bytes: 1024