#include
#include
using namespace std;
bool checkOrder(int n, int* order) {
stack station; // 中转站C
int nextCar = 1; // 下一辆要驶出的车厢编号
for (int i = 0; i < n; i++) {
// 当前车厢符合顺序,直接驶出
if (order[i] == nextCar) {
nextCar++;
}
// 当前车厢不符合顺序,尝试从中转站驶出
else if (!station.empty() && station.top() == nextCar) {
station.pop();
nextCar++;
i--; // 重新检查当前车厢是否符合顺序
}
// 当前车厢不符合顺序,从A方向驶入中转站
else {
station.push(order[i]);
}
}
// 检查中转站中剩余的车厢是否能按照顺序驶出
while (!station.empty() && station.top() == nextCar) {
station.pop();
nextCar++;
}
// 如果所有车厢都按照顺序驶出,则返回true,否则返回false
return nextCar == n + 1;
}
int main() {
int n;
cin >> n;
int* order = new int[n];
for (int i = 0; i < n; i++) {
cin >> order[i];
}
bool result = checkOrder(n, order);
if (result) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
delete[] order;
return 0;
}