思路:若求一个二叉搜索树的所有节点深度和,则可以用一个map来算,map的key值默认从小到大排序,value值记录各个节点深度,然后lower_bound查找
#include <iostream>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
map<int, long long> m;
m[0] = 0;
long long res = 0;
for (int p, i = 0; i < n; i++) {
cin >> p;
map<int, long long>::iterator it = m.lower_bound(p);
it--;//减一后才是小于此节点并且最大的
cout<<it->first<<" "<<it->second<<endl;
res += it->second;
m[p] = it->second + 1;
it->second++;
}
cout << res << endl;
return 0;
}