#include #include #include #include #include #include #include #include #include using namespace std; int main(){ int n; cin >> n; vector a(n+2, 0); for(int i=0; i> a[i+1]; vector l = a; sort(l.begin(), l.end()); l.erase(unique(l.begin(), l.end()), l.end()); for(int i=0; i<=n; i++){ a[i] = lower_bound(l.begin(), l.end(), a[i]) - l.begin(); } //vector b(a.rbegin(), a.rend()); int ans = 0; vector> dp_l(n+2, vector(n+2, 0)); vector> dp_r(n+2, vector(n+2, 0)); //dp_l[1][n+1] = dp_l[0][n] = 1; //dp_r[1][n+1] = dp_r[0][n] = 1; for(int i=1; i<=n; i++){ //lを場所iまで選んでいる for(int j=n; j>=i; j--){ //rを場所jまで選んでいる //rとなるものを選ぶ if(a[i] < a[j]){ dp_r[i][j] = max(max(dp_r[i-1][j], dp_r[i][j]), dp_l[i][j+1]+1); }else{ dp_r[i][j] = max(dp_r[i-1][j], dp_r[i][j]); } //lとなるものを選ぶ if(a[i] > a[j]){ dp_l[i][j] = max(max(dp_l[i][j+1], dp_l[i][j]), dp_r[i-1][j]+1); }else{ dp_l[i][j] = max(dp_l[i][j+1], dp_l[i][j]); } } } for(int i=0; i