标签:cout 代码 有一个 pac 一个 int pos namespace return
题目不懂啥意思。看题解才知道,是可以任意选点。。。
直接按照中右左顺序遍历。
这样选点满足要求。
再LIS即可。
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 10; int W[MAXN]; int L[MAXN],R[MAXN]; int Res[MAXN],dp[MAXN]; int pos = 0; void Dfs(int x) { if (x == 0) return; Res[++pos] = x; Dfs(R[x]); Dfs(L[x]); } int main() { int n; cin >> n; for (int i = 1;i <= n;i++) cin >> W[i]; for (int i = 1;i <= n;i++) cin >> L[i] >> R[i]; Dfs(1); for (int i = 1;i <= n;i++) Res[i] = W[Res[i]]; pos = 1; dp[1] = Res[1]; for (int i = 2;i <= n;i++) { if (Res[i] > dp[pos]) { dp[++pos] = Res[i]; } else { int x = lower_bound(dp + 1, dp + 1 + pos, Res[i]) - dp; dp[x] = Res[i]; } } cout << pos << endl; return 0; }
标签:cout 代码 有一个 pac 一个 int pos namespace return
原文地址:https://www.cnblogs.com/YDDDD/p/10357756.html