Element Extermination—CF1375C
参考文章
思路
若 a 1 < a n a_1<a_n a1<an,
初始时 a 2 , . . . , a n − 1 a_2, ..., a_{n-1} a2,...,an−1 这 n − 2 n-2 n−2 个元素中大于 a 1 a_1 a1 中的元素都能通过 a 1 a_1 a1 而被删除,而小于 a n a_n an 中的元素都能通过 a n a_n an 而被删除。易知这样这 n − 2 n-2 n−2 个元素一定大于 a 1 a_1 a1 或小于 a n a_n an,所以最后剩下初始时的 a 1 a_1 a1 和 a n a_n an,任意删除其中一个即可。
若 a 1 > a n a_1>a_n a1>an,
因为在删除 a a a 中的元素的时候,易知 a 1 a_1 a1 不会减小, a n a_n an 不会增大。所以动态变化的数组 a a a 无论什么时候都一定满足 a 1 > a n a_1>a_n a1>an,那么显而易见 a a a 数组不可能剩一个元素。
C o d e Code Code
#include <bits/stdc++.h>
#define int long long
#define sz(a) ((int)a.size())
#define all(a) a.begin(), a.end()
using namespace std;
using PII = pair<int, int>;
using i128 = __int128;
const int N = 3e5 + 10;int n;
int a1, an;void solve() {cin >> n;for (int i = 1; i <= n; i ++) {cin >> an;if (i == 1) {a1 = an;}}if (a1 < an) {cout << "YES\n";} else {cout << "NO\n";}
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int T = 1;cin >> T; cin.get();while (T --) solve();return 0;
}