由于满足的序列才能被消除,所以我们尽可能让前面的数字更小。
从左往右依次考虑每一个数字。
假如,则保留,于是变成和的比较,和与的比较同理。
假如,则一直往后,找到第一个满足的数。由于之间的数都比要小(因为且是第一个比大的),则从开始从右往前比较,并且总是保留,最后就变成和的比较。由于已经知道,所以保留,变成与的比较,和与的比较同理。假如没有找到满足要求的,即大于它之后的所有数,则最后无法消除。
所以我们要么
解法:
只需要比较和的大小。如果,则NO,否则YES。
note: 这里把数组画在坐标系上会更容易理解。
代码均为提交通过版本。为保持比赛时原样,没有后期优化或者修改。但为方便阅读,可能会增加注释。
#include <iostream>
using namespace std;
int main() {
int tcase;
std::ios::sync_with_stdio(false);
cin >> tcase;
while(tcase--) {
int n;
cin >> n;
int first, last;
for(int i = 0; i < n; i++) {
int x;
cin >> x;
if (i == 0) {
first = x;
} else if (i == n - 1) {
last = x;
}
}
if (first < last) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
本文地址:https://blog.csdn.net/rbb317/article/details/107138373
如对本文有疑问, 点击进行留言回复!!
Xamarin 安卓 相机 各种坑 目标API Android 6以后,我选的目标API版本是 Android 10
Android 9.0+软件某些功能突然暴毙:cleartext not permitted
Android : Resource is not a Drawable (color or path)
Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
网友评论