#include #include #include #include using namespace std; int n =0; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; vector prices(n); set unproven; for (int i = 0; i > prices[i]; unproven.insert(i); } int minimum_idx = 0; int maximum_idx = 0; vector inverse(n); // remove max and min idexes for (int i = 0; i prices[maximum_idx]) maximum_idx = i; } unproven.erase(minimum_idx); unproven.erase(maximum_idx); for (int l = 3; l <= n; l+= 2){ //try length three intervals for (int i = 0; i < n-l+1; ++i){ vector subset(l); for (int j = 0; j < l; ++j){ subset[j] = prices[i+j]; } /* cout << "subset: "; for (int j = 0; j < l; ++j){ cout << subset[j] << " "; } cout << "\n"; */ vector unsorted = subset; sort(subset.begin(), subset.end()); int median = subset[(l+1)/2 - 1]; int median_idx = inverse[median]; //cout << "Before erasing, median, median_idx: " << median << " " << median_idx << "\n"; unproven.erase(median_idx); /* cout << "unproven: "; for (auto p : unproven){ cout << p << " "; } cout << "\n"; */ } } //printing for (int i = 0; i < n; ++i){ if (i == minimum_idx || i == maximum_idx) { cout << "NO "; continue; } // not in uproven = yes else if (unproven.count(i) == 0) { cout << "YES "; continue; } cout << "NO "; } return 0; }