[CCC 2018] 平衡树

Posted jyyhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CCC 2018] 平衡树相关的知识,希望对你有一定的参考价值。

题面在这里!

 

    根据题目描述就可以直接模拟出一个暴力。

    如果把前 n^(1/2) 的树的方案数先一遍 O(n^(3/4)) 暴力预处理出来(其实复杂度并到不了这个级别),然后把n带进来直接暴力算就行了。

    顺便说一下这个玩意好像就是杜教筛的复杂度?

    只不过预处理不了 O(n^(2/3)),但是效果也不错了,毕竟n只有1e9。。

 

#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int N=40005;

int n,M;
ll ans[N];
unordered_map<int,ll> mmp;

inline void init(){
	ans[1]=ans[2]=1;
	for(int i=3;i<=M;i++)
	    for(int j=2,k,now;j<=i;j=k+1){
	    	now=i/j,k=i/now;
	    	ans[i]+=ans[now]*(ll)(k-j+1);
		}
}

inline ll Get(int x){
	if(x<=M) return ans[x];
	if(mmp.count(x)) return mmp[x];
	
	ll an=0;
	for(int i=2,j,now;i<=x;i=j+1){
		now=x/i,j=x/now;
		an+=Get(now)*(ll)(j-i+1);
	}
	
	mmp[x]=an;
	return an;
}

int main(){
	scanf("%d",&n),M=sqrt(n+0.5)+1;
	init(),printf("%llu
",Get(n));
	return 0;
}

  

以上是关于[CCC 2018] 平衡树的主要内容,如果未能解决你的问题,请参考以下文章

PHP代码实现平衡二叉树详解

数据结构学习-AVL平衡树

判断一颗二叉树是否为二叉平衡树 python 代码

编程算法 - 推断二叉树是不是平衡树 代码(C)

平衡二叉树平衡调整代码

平衡树代码总结