zoukankan      html  css  js  c++  java
  • 「模板」 01 Trie实现平衡树功能

    不想多说什么了。费空间,也不算太快,唯一的好处就是好写吧。

    #include <cstdio>
    #include <cstring>
    const int MAXN=100010<<5,INF=10000000;
    int n;
    class Trie
    {
    	public:
    		Trie(void)
    		{
    			cnt=1;
    			memset(s,0,sizeof s);
    		}
    		void Insert(int x)
    		{
    			int k=1,p=x+INF;
    			for(int i=30,t;~i;++s[k=s[k].c[t]].size,--i)
    				if(!s[k].c[t=p>>i&1])
    					s[k].c[t]=++cnt;
    			s[k].v=x;
    		}
    		void Erase(int x)
    		{
    			int k=1,p=x+INF;
    			for(int i=30;~i;--s[k=s[k].c[p>>i&1]].size,--i);
    		}
    		int Rank(int x)
    		{
    			int k=1,p=x+INF,ans=1;
    			for(int i=30,t;~i;--i,k=s[k].c[t])
    				if(t=p>>i&1)
    					ans+=s[s[k].c[0]].size;
    			return ans;
    		}
    		int Find(int x)
    		{
    			int k=1,ans=0;
    			for(int i=30,t,f;~i;--i,k=s[k].c[t])
    				if(t=(x>(f=s[s[k].c[0]].size)))
    					x-=f;
    			return s[k].v;
    		}
    		int Pre(int x)
    		{
    			return Find(Rank(x)-1);
    		}
    		int Next(int x)
    		{
    			return Find(Rank(x+1));
    		}
    	private:
    		int cnt;
    		struct node
    		{
    			int v,size,c[2];
    		}s[MAXN];
    }T;
    int main(int argc,char *argv[])
    {
    	freopen("testdata.in","r",stdin);
    	freopen("my.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1,opt,x;i<=n;++i)
    	{
    		scanf("%d %d",&opt,&x);
    		switch(opt)
    		{
    			case 1:
    				T.Insert(x);
    				break;
    			case 2:
    				T.Erase(x);
    				break;
    			case 3:
    				printf("%d
    ",T.Rank(x));
    				break;
    			case 4:
    				printf("%d
    ",T.Find(x));
    				break;
    			case 5:
    				printf("%d
    ",T.Pre(x));
    				break;
    			case 6:
    				printf("%d
    ",T.Next(x));
    				break;
    		}
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

    谢谢阅读。

  • 相关阅读:
    系统安全
    导出csv文件示例
    MsChart在MVC下的问题
    记录一些测试的结果
    使用CTE减少统计子查询
    otl获得sql出错位置(oracle)
    在sql语句中使用plsql变量
    Java经典编程题50道之二十四
    Java经典编程题50道之二十三
    Java经典编程题50道之二十二
  • 原文地址:https://www.cnblogs.com/Capella/p/8361688.html
Copyright © 2011-2022 走看看