【Codeforces Global Round 9 C】Element Extermination
阿新 • • 發佈:2020-07-09
題目連結
翻譯
給你一個排列,你每次可以將 \(a[i]<a[i+1]\) 中的 \(a[i]\) 或者 \(a[i+1]\) 刪掉。
問你,最後能不能刪得只剩下 \(1\) 個元素。
題解
考慮最大的元素 \(n\), 想想它是不是能一直往左刪元素?
但是刪到第一個元素的時候,就不能再刪了,因為 \(n\) 可能不是最後一個元素,如果再刪的話,就沒有
其他元素能刪掉 \(n\) 了, 沒辦法這個時候只能保留第一個元素然後把 \(n\) 給刪掉了。
然後接著找 \(n\) 右邊的次大的元素 \(x\) (\(n\) 左邊只剩第一個數字了),也重複進行刪除元素操作。
如果 \(x\)
不難發現,只要排列的最後一個元素是大於第一個元素的,那麼最後一定能輪到這個 \(a[n]\) 進行這樣的
步驟,就能刪掉第一個元素,只剩一個元素 \(a[n]\) 啦。
如果最後一個元素小於第一個元素,根據上面的過程可以發現,第一個元素沒辦法被刪除。
神奇的一道題。
程式碼
#include <cstdio> using namespace std; const int N = 3e5; int T, n; int a[N + 10]; int main(){ scanf("%d",&T); while (T--){ scanf("%d",&n); for (int i = 1;i <= n; i++){ int x; scanf("%d",&a[i]); } if (a[n] > a[1]){ puts("YES"); }else{ puts("NO"); } } return 0; }